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

时间:2015-06-12 16:06:24

标签: c++ cmake linuxmint

我正在尝试从源代码构建应用程序。我可以使用' cmake来配置它。'。但是,当我跑步时,制造'它给了我这个:

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 17上运行gcc版本:4.9.2。我将不胜感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将-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")