从源代码构建时出现链接器错误

Linker error while building from source code

本文关键字:链接 错误 源代码 构建      更新时间:2023-10-16

我正在尝试从源代码构建应用程序。我能够使用"cmake ."配置它。但是,当我运行"make"时,它给了我这个:

Linking CXX executable ../../bin/lux64/Release/od_batch_launcher
../../bin/lux64/Release/libBasic.so: undefined reference to `dlopen'
../../bin/lux64/Release/libBasic.so: undefined reference to `dlclose'
../../bin/lux64/Release/libBasic.so: undefined reference to `dlerror'
../../bin/lux64/Release/libBasic.so: undefined reference to `dlsym'
../../bin/lux64/Release/libBasic.so: undefined reference to `pthread_sigmask'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/lux64/Release/od_batch_launcher] Error 1
make[1]: *** [src/Basic/CMakeFiles/od_batch_launcher.dir/all] Error 2
make: *** [all] Error 2

我知道它无法动态链接到 c++ 库。我不太知道如何对cmake进行必要的更改。我在Linux Mint 4.9.2上运行gcc版本:17。我将不胜感激任何帮助。谢谢!

尝试将-DCMAKE_EXE_LINKER_FLAGS=-ldl传递给 CMake 可执行文件。若要更改 CMake 生成脚本,请添加如下内容:

target_link_libraries(target_name dl)

其中target_name基本上是没有任何扩展名的可执行文件名称(例如 .exe )。

编辑:实际上,我只是重读了你的问题,我把它放在错误的地方。你真的想要:

target_link_libraries(Basic dl)

显然,还有与pthread相关的错误,因此您还必须添加:

target_compile_options(Basic PUBLIC -pthread)

这两个都进入包含add_library(Basic)(通常CMakeLists.txt)的任何文件中。

编辑 2:而不是target_compile_options,请尝试:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")