如何在依赖的静态库中链接Boost

T33*_*33C 20 c++ linker boost visual-studio-2010

在MS Visual C++ 2010中

我的解决方案中有一个C++项目,它使用了boost并且工作得很好.

然后,我决定将此项目转换为静态库,并创建一个依赖于此静态库的新项目.

现在,我转换的静态库构建没有错误和警告(编译器和链接器),但新项目编译但不链接.

我正进入(状态:

1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
Run Code Online (Sandbox Code Playgroud)

作为测试,我添加了该库的链接器选项的完整目录路径......然后它抱怨了

1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
Run Code Online (Sandbox Code Playgroud)

我现在已经添加了所有库的完整路径,现在它已构建并运行.

我对这个解决方案不满意,因为:

  1. 我不希望库的用户不必担心在boost中链接.
  2. 这很乱

我知道答案是创建一个DLL,但有一种方法可以静态地执行此操作并保持链接在我的静态库级别.

编辑:

如果我告诉.exe链接器显式忽略boost libs那么一切都没问题,除了.exe根本不用担心boost.

/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
Run Code Online (Sandbox Code Playgroud)

use*_*875 25

显然你不需要.libs,因为你的exe也没有它们.您似乎只使用boost header-only方法和类.因此,只需通过在项目中定义预处理程序符号BOOST_ALL_NO_LIB来告诉boost禁用自动链接.

如果你想通过包含所有的boost来使你的.lib不必要大,这个问题似乎有一个答案(我从未真正尝试过):将静态库链接到其他静态库