当前位置: 技术问答>linux和unix
LINUX下的静态库编译链接问题
来源: 互联网 发布时间:2016-11-03
本文导语: 现在静态库包含了, 但编译时只要测试程序中调用静态库中的某些函数, 编译就通不过,提示找不到引用, 调用静态库中的某些函数又是没有问题的, 不调用静态库的函数也是编译运行都没有问题的, 请问大...
现在静态库包含了, 但编译时只要测试程序中调用静态库中的某些函数, 编译就通不过,提示找不到引用, 调用静态库中的某些函数又是没有问题的, 不调用静态库的函数也是编译运行都没有问题的, 请问大侠是什么问题啊, 谢谢。
|
是不是库的顺序问题。
比如main.c里调用libfoo.a里的foo()函数,foo()函数调用libbar.a里的bar()函数
gcc -static -o foobar main.c -L. -lfoo -lbar就是可以的, 但是
gcc -static -o foobar main.c -L. -lbar -lfoo就会报找不到bar()函数的。
简单的原则就是被调用的需要放在调用者的后面。
比如main.c里调用libfoo.a里的foo()函数,foo()函数调用libbar.a里的bar()函数
gcc -static -o foobar main.c -L. -lfoo -lbar就是可以的, 但是
gcc -static -o foobar main.c -L. -lbar -lfoo就会报找不到bar()函数的。
简单的原则就是被调用的需要放在调用者的后面。
|
用ldconfig查看库有没有链接上,如果没有的话就要看看库是不是全部都加进来了还有顺序对不对,如果没缺且顺序没错的话试试编译时加多一个参数 -share,如果还不行再试试把库的绝对路径加到/etc/ld.so.conf文件中