Boost.Thread 链接 - boost_thread 与 boost_thread-mt

Posted

技术标签:

【中文标题】Boost.Thread 链接 - boost_thread 与 boost_thread-mt【英文标题】:Boost.Thread Linking - boost_thread vs. boost_thread-mt 【发布时间】:2011-03-03 04:27:05 【问题描述】:

我不清楚Boost.Thread 1.34.1 库有哪些链接选项。我在 Ubuntu 8.04 上,我发现在链接编译和运行期间使用 boost_threadboost_thread-mt 时,我在上面的链接中没有看到关于这些或任何其他链接选项的任何文档。

有哪些 Boost.Thread 链接选项可用,它们是什么意思?

【问题讨论】:

为什么要构建 1.34.1 而不是 1.43.1? @DeadMG:因为这是 Ubuntu 8.04 附带的,我没有编译和安装更新版本的选项。 【参考方案1】:

嗯……

第一个有趣的是,名称中的-mt 修饰符表示该库可以用于多线程。这可能会让我们相信boost_thread(没有这个修饰符)可能是多线程不安全的......

但实际情况是(如在我自己的 Ubuntu 10.04 机器上看到的),boost_thread 是到 boost_thread-mt 的软链接,这意味着两者是一回事。

如果你想验证它,你可以在你的ubuntu上打开一个控制台(让控制台全屏,因为名字很长),然后输入:

cd /usr/lib

移动到 Boost 库所在的目录。然后:

ls -l ./libboost_thread*

这将列出所有以libboost_thread 开头的文件以及附加信息。结果将类似于:

[...] ./libboost_thread.a
[...] ./libboost_thread-mt.a -> libboost_thread.a

如您所见,libboost_thread.a 是一个静态库,libboost_thread-mt.a 是指向libboost_thread.a 的软链接

【讨论】:

【参考方案2】:

boost库命名方案详细参考见:http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html#library-naming

【讨论】:

以上是关于Boost.Thread 链接 - boost_thread 与 boost_thread-mt的主要内容,如果未能解决你的问题,请参考以下文章

当 read_json 在多个线程中使用而不与 boost.thread 库链接时,我们是不是可以始终使用 BOOST_SPIRIT_THREADSAFE 标志?

如何在 Makefile 中链接 boost 库?

使用 CLR 提升线程

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

Boost.Thread 还是只是::thread?

boost::thread & 成员函数