这是因为某些库比如libxxx.so在编译时没有找到,排查时有以下几个思路:

  1. libxxx.so文件是否确实存在
  2. libxxx.so存放目录是否已经包含进项目
  3. 可以通过以下命令查看系统如何查找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 生成警告
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐