具有Boost和CMake的单线程应用程序

麦克西姆

我正在编写一个单线程应用程序。我使用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我根本不使用pthreads,并且我希望编译单线程版本?

菲尔

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

Boost_USE_MULTITHREADED-设置为OFF以使用非多线程库(“ mt”标签)。默认为开。

在致电之前进行设置find_package(Boost)对Windows上将Boost库与Boost_USE_STATIC_LIB OFF链接的答案中我详细说明了如何使用cmake针对boost进行构建。回答您问题的相关部分是

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

使用makefile时,经常发现使用它make VERBOSE=1来准确了解make系统正在调用哪些命令是很有帮助的

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

IIS和单线程应用程序

具有单线程应用程序阻止,直到发生特定事件,然后继续

如何使 Spring 应用程序成为单线程或具有一个实例?

在单线程应用程序中,是否只有一个线程是内核线程?

单线程CPU上的多线程应用程序?

从单线程应用程序调用pthread_self()

在单线程应用程序中使用StringBuffer

异步对单线程应用程序的好处

volatile在C ++中的单线程应用程序中是否有用?

单线程Java应用程序可启动70多个线程

在C ++(VC ++ 2010 Express)上,双线程应用程序比单线程应用程序慢。怎么解决?

调试时,单线程应用程序是否会在内核之间跳转?

同步方法在单线程应用程序中会变慢吗?

怎么可能“ while(i == i)”;是单线程应用程序中的非无限循环?

整体热量更少?运行单线程应用程序的双核与四核CPU

为什么单线程应用程序占用多核并限制cpu使用率

单线程应用程序中的实体框架数据库连接

使用 PipedOutputStream 和 PipedInputStream 的具有单线程读取器的多线程编写器

除非程序员明确创建Threads或Runnable的实现,否则所有Java应用程序都是单线程的吗?

具有繁重的单线程进程和单核亲缘关系的意外关闭

将单线程应用程序迁移到多线程,并行执行,蒙特卡洛仿真

使用多线程程序而不是使用单线程程序并行编译项目是否具有性能优势?

单线程和同步之间有区别吗?

多线程程序比单线程慢

单线程同步和异步混淆

javascript如何单线程和异步

Redis:竞争状况和单线程

异步和等待是单线程的吗?

简单线程程序的链接器错误(boost_chrono的符号丢失)