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

Linker error while building from source code

我正在尝试从源代码构建应用程序。我可以使用 '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

我知道它无法动态 link 到 c++ 库。我不太清楚如何对 cmake 进行必要的更改。我是 运行ning gcc version: 4.9.2 on Linux Mint 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")