编译链接“ undefined reference to ”

最近在移植一个项目,从windows移植到Linux,在解决掉编译前期问题后,在链接的时候碰到了各种的“ undefined reference to ”问题。

检查所依赖的.h文件是否 #include <>

首先检查所依赖的.h文件是否 #include“xxx.h”

链接时缺少了相关的目标文件(.o)或者库文件(.so)

造成这种情况的原因比较多:

忘记指定目标文件(.o);

忘记指定链接库(-L /xxx/yyy/  -lA);

遗漏指定链接库(B动态库依赖A动态库,链接忘记指定A动态库 -lA)

fun.h

#ifndef __FUN_H__
#define __FUN_H__

int fun();

#endif

fun.cpp

#include "fun.h"
int fun()
{
	return 0;
}

fun1.h

#ifndef __FUN1_H__
#define __FUN1_H__

int fun1();

#endif

fun1.cpp

#include "fun.h"

int fun1()
{
	return fun();
}

缺少链接库

root@localhost:~/test# g++ -fpic -shared fun.cpp -o libfun.so
root@localhost:~/test# g++ -fpic -shared fun1.cpp -o libfun1.so
root@localhost:~/test# g++ main.cpp -o main -L ./ -I ./ -lfun1
.//libfun1.so: undefined reference to `fun()'
collect2: error: ld returned 1 exit status

正确的编译

root@localhost:~/test# g++ -fpic -shared fun.cpp -o libfun.so
root@localhost:~/test# g++ -fpic -shared fun1.cpp -o libfun1.so
root@localhost:~/test# g++ main.cpp -o main -L ./ -I ./ -lfun1 -lfun
root@localhost:~/test#

继续阅读"编译链接“ undefined reference to ”"