这是因为某些库比如libxxx.so
在编译时没有找到,排查时有以下几个思路:
libxxx.so
文件是否确实存在libxxx.so
存放目录是否已经包含进项目- 可以通过以下命令查看系统如何查找
libxxx.so
文件的具体路径
ld -lxxx --verbose
以lpthread
为例,如下系统在第四次查找时找到了对应的文件:
ld -lpthread --verbose
# 系统查找路径如下:
ld: mode elf_x86_64
attempt to open /usr/local/lib/x86_64-linux-gnu/libpthread.so failed
attempt to open /usr/local/lib/x86_64-linux-gnu/libpthread.a failed
attempt to open /lib/x86_64-linux-gnu/libpthread.so failed
attempt to open /lib/x86_64-linux-gnu/libpthread.a succeeded
附一些常见gcc参数备忘:
-c 只编译并生成目标文件
-IDIRECTORY 指定头文件搜索路径为DIRECTORY,即.h文件所在目录
-LDIRECTORY 指定额外库函数的搜索路径为DIRECTORY,即.so文件所在目录
-lLIBRARY 指定额外库函数的LIBRARY,用了libcurl.so就要添加 -lcurl
-o 指定生成文件
-shared 生成共享目标文件,即生成.so文件
-g debug版本
-w 不生成警告
-Wall 生成警告