我们正在构建一个跨平台的实用程序,它必须占用很少的空间。当我们需要时,我们一直在从boost中提取头文件,但现在我们必须链接一些boost C ++线程代码。最简单的解决方案是使用CMake的“add_library”命令创建我们自己的自定义库,以创建由一些boost线程源文件组成的静态库。这些编译没有任何问题。
当我尝试从可执行文件链接到此库时出现困难。 Visual Studio 2008返回错误,指出它无法链接到“libboost_thread-vc90-mt-sgd-1_40.lib”。让我感到困惑的是,我已经浏览了所有的源代码和CMake配置文件,我找不到任何对这个libboost库的引用,这让我觉得这已经以某种方式自动生成了。
这在Linux中运行正常,有人能指出为什么我在Windows中遇到这些问题吗?
答案 0 :(得分:3)
@Gearoid
您找到了问题的正确原因,但没有找到正确的解决方案。 BOOST_AUTO_LINK_NOMANGLE
是内部的,即对于图书馆作者来说,是用于控制自动链接的定义。用户级别定义为BOOST_ALL_NO_LIB
,在定义时会禁用您使用的所有Boost库代码的自动链接功能。 user.hpp
配置标头(see user.hpp near the bottom和Boost Config documentation)中对此进行了描述。您还可以在每个库级别上控制此操作,如该标头中所述。
答案 1 :(得分:0)
好吧,事实证明,Boost使用Visual Studio的这个自动链接功能,它嵌入了对受损(即平台编译器 - 多线程等)提升库名称的引用。
控制它的头文件名为“auto_link.hpp”,它位于boost include树的config目录中。有一个名为“BOOST_AUTO_LINK_NOMANGLE”的特殊预处理器定义可以切换此行为。
微软平庸的另一个胜利。