/usr/bin/ld: /lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
时间: 2024-12-16 21:28:49 浏览: 11
当你在Linux系统中尝试链接程序时,遇到错误提示`/usr/bin/ld: /lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line`,这通常表示链接器找不到动态链接库(Dynamic Shared Object,简称DSO),在这个例子中是`libm.so.6`,这是数学函数库的一部分。
这个错误通常是由于你在构建程序时忘记指定依赖于`libm`的选项,比如 `-lm` 或 `--lto-opt -lm`。`libm.so.6`通常用于包含诸如浮点运算、三角函数等标准数学函数。
解决这个问题需要在编译命令中添加正确的链接选项,例如如果你使用gcc/g++编译:
```bash
gcc your_program.c -o your_program -lm
```
或者如果使用CMake,可以在`add_executable`指令中加入链接选项:
```cmake
add_executable(your_program your_program.cpp)
target_link_libraries(your_program m)
```
相关问题
/usr/bin/ld: /tmp/ccoNyDLK.o: undefined reference to symbol 'sem_close@@GLIBC_2.2.5' /usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status
这个错误表明您的程序使用了 `sem_close` 函数,它位于 `librt` 库中,但是 `libpthread` 库中也有定义。因此,您需要在链接时同时链接这两个库来解决这个问题。
您可以在编译命令中添加 `-lrt -pthread` 选项,如下所示:
```
gcc -o your_program your_program.c -lrt -pthread
```
这样就可以同时链接 `librt` 和 `libpthread` 库了,解决了这个错误。
/usr/bin/ld: /usr/local/lib/libprotobuf.so: undefined reference to symbol 'inflateEnd' /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libz.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status t3/CMakeFiles/t3_node.dir/build.make:318: recipe for target '/smartview/devel/lib/t3/t3_node' failed make[2]: *** [/smartview/devel/lib/t3/t3_node] Error 1 CMakeFiles/Makefile2:3555: recipe for target 't3/CMakeFiles/t3_node.dir/all' failed make[1]: *** [t3/CMakeFiles/t3_node.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [100%] Built target smartview_node Makefile:145: recipe for target 'all' failed make: *** [all] Error 2 Invoking "make -j20 -l20" failed
根据错误信息,可以看出是在链接时发生了错误。错误信息提示 `/usr/local/lib/libprotobuf.so` 引用了 `inflateEnd` 符号,但是该符号未在链接时找到。同时,还提示 `/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libz.so` 缺失。
综合来看,可能是在链接时缺失了 zlib 库。可以尝试在 CMakeLists.txt 中添加以下语句:
```
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lz")
```
该语句的作用是将链接时需要的 zlib 库添加到链接选项中。您可以将其添加到 `project` 和 `find_package` 语句之间。
阅读全文