我正在尝试从源代码构建应用程序。我可以使用' 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。我将不胜感激任何帮助。谢谢!
答案 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")