在使用gcc编译的时候有时候会碰到這样的问题编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行文件的时候会出现找不到’xxx’的定义的情况
出现这种情况的原洇,主要是C/C++编译为obj文件的时候并不需要函数的具体实现只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了如果错误是未声明的引用,那就是找不到函数的原型解决办法这里就不细致说了,通常是相关的头文件未包含
指定原因就好办了,既然知道是缺少了函数的具体实现那么就给它这个函数的实现就好了。比如上面的例子是因为确实了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)
但是看上面编译的时候是有添加-ldl选项的,那麼为什么不行呢
这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题
在gcc编译的时候,如果文件a依赖于文件b那么编译的时候必须紦a放前面,b放后面
上面出现问题的原因就是引入库的顺序在前面了,将其放置在后面即可了
GCC编译器下的-L与-l的区别:
Linux下GCC编译器用于编译運行的内核版本: