C++ 从源代码生成链接器时出错
我正在尝试从源代码构建应用程序。我可以使用“cmake”对其进行配置。但是,当我运行“make”时,它会告诉我:C++ 从源代码生成链接器时出错,c++,cmake,linux-mint,C++,Cmake,Linux Mint,我正在尝试从源代码构建应用程序。我可以使用“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
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。如果有任何帮助,我将不胜感激。谢谢大家! 尝试将
-DCMAKE\u EXE\u LINKER\u FLAGS=-ldl
传递给CMake可执行文件。要更改CMake构建脚本,请添加以下内容:
target_link_libraries(target_name dl)
其中,target\u name
基本上是没有任何扩展名的可执行文件名(例如,.exe
)
编辑:事实上,我刚刚重读了你的问题,我把它放错地方了。你真的想要:
target_link_libraries(Basic dl)
显然,还存在与pthread相关的错误,因此您还必须添加:
target_compile_options(Basic PUBLIC -pthread)
无论哪个文件包含add\u library(Basic)
(通常是CMakeLists.txt
),这两个文件都会被放入其中
编辑2:尝试以下操作,而不是目标编译选项
:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
谢谢所以我应该在CMakeLists.txt中添加target_link_库(target_name dl)?目标的名字应该是od-batch-launcher?对不起,我对CMake不太舒服。太好了!有些进步!!与“dlopen”等相关的错误;你走了。但是,我无法添加目标编译选项。我在src/Basic/CMakeLists.txt:116(target\u compile\u options)处发现:CMake错误:target\u compile\u options用无效参数调用谢谢!添加PUBLIC也允许cmake通过。但是,我仍然得到:../../bin/lux64/Release/libBasic.so:当我运行make时,对'pthread_sigmask'的引用未定义。@user2984140您可以尝试使用
set(CMAKE_CXX_FLAGS“${CMAKE_CXX_FLAGS}-pthread”)
而不是target_compile_options
?