【发布时间】:2015-07-26 19:29:49
【问题描述】:
我正在编写一个单线程应用程序。我使用 CMake 来编译它。我的应用程序是使用 Boost 用 C++ 编写的。当我的应用程序运行“make”链接失败并显示以下错误消息:
Linking CXX executable whisk
cd <project>/build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/whisk.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/whisk.dir/driver_simdag.cpp.o CMakeFiles/whisk.dir/whisk.cpp.o CMakeFiles/whisk.dir/driver_miror.cpp.o CMakeFiles/whisk.dir/driver.cpp.o CMakeFiles/whisk.dir/main.cpp.o -o whisk -rdynamic -lboost_program_options
/usr/bin/ld: CMakeFiles/whisk.dir/whisk.cpp.o: undefined reference to symbol 'pthread_rwlock_unlock@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
这是错误本身:
undefined reference to symbol 'pthread_rwlock_unlock@@GLIBC_2.2.5'
我的 src 目录中的 CMakeLists.txt 如下:
file(GLOB whisk_SRC "[a-zA-Z]*.cpp")
add_executable(whisk ${whisk_SRC})
FIND_PACKAGE( Boost 1.40 COMPONENTS program_options log REQUIRED )
set(Boost_USE_MULTITHREADED OFF)
# set_property(TARGET whisk PROPERTY Boost_USE_MULTITHREADED OFF)
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
set_property(TARGET whisk PROPERTY CXX_STANDARD 11)
set_property(TARGET whisk PROPERTY CXX_STANDARD_REQUIRED ON)
target_link_libraries(whisk ${Boost_PROGRAM_OPTIONS_LIBRARY})
install(TARGETS whisk DESTINATION bin)
我如何告诉 CMake 和 Boost 我根本不使用 pthread 并且我想要编译单线程版本?
【问题讨论】:
-
CMake 在这里如何相关,你能从命令行成功编译吗?您的 Boost 库是否可能在单线程版本中不可用(使用
ldd查找依赖项)?另外,您对单线程版本有何期望? -
尝试使用
threading=single构建提升。 -
@UlrichEckhardt 当我从命令行编译时,我发现我有同样的问题。所以,也许你是对的,cmake 在这里可能无关紧要。我想要单线程版本,因为我确信我不需要线程安全,因为我的应用程序总是单线程的。