C++ 带有Boost和CMake的单线程应用程序

C++ 带有Boost和CMake的单线程应用程序,c++,boost,cmake,C++,Boost,Cmake,我正在编写一个单线程应用程序。我使用CMake来编译它。我的应用程序是用Boost在C++中编写的。运行应用程序的“make”链接失败时,出现以下错误消息: src目录中的My CMakeLists.txt如下所示: undefined reference to symbol 'pthread_rwlock_unlock@@GLIBC_2.2.5' file(GLOB whisk_SRC "[a-zA-Z]*.cpp") add_executable(whisk ${whisk_SRC})

我正在编写一个单线程应用程序。我使用CMake来编译它。我的应用程序是用Boost在C++中编写的。运行应用程序的“make”链接失败时,出现以下错误消息:

src目录中的My CMakeLists.txt如下所示:

 undefined reference to symbol 'pthread_rwlock_unlock@@GLIBC_2.2.5'
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我根本不使用pthreads,我希望编译单线程版本?

根据文档页面,您需要使用

Boost_USE_multi-threaded-设置为OFF以使用非多线程 库('mt'标记)。默认值为ON

在调用
查找包(Boost)
之前设置此选项。在本文中,我将详细介绍如何使用cmake构建boost。回答你问题的相关部分是

set(Boost_USE_MULTITHREADED OFF)
find_package( Boost 1.57.0 COMPONENTS system filesystem REQUIRED )

在使用makefiles时,我经常发现使用
make VERBOSE=1
来准确查看make系统调用的命令很有帮助。

CMake在这里的相关性如何?您能从命令行成功编译吗?您的Boost库是否在单线程版本中不可用(使用
ldd
查找依赖项)?另外,您希望从单线程版本中获得什么好处呢?尝试使用
threading=single
@UlrichEckhardt构建boost。当我从命令行编译时,我发现我也有同样的问题。所以,也许你是对的,cmake在这里可能无关紧要。我想要单线程版本,因为我确信我不需要线程安全,因为我的应用程序总是单线程的。
set(Boost_USE_MULTITHREADED OFF)
find_package( Boost 1.57.0 COMPONENTS system filesystem REQUIRED )