从源代码构建时出现链接器错误
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")
我正在尝试从源代码构建应用程序。我可以使用 '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")