我正在尝试测试一些可boost::filesystem
用于各种事物的代码。
我为 vc11 构建了 boost 1.51 的静态版本,预期的库按预期出来了。
这是我使用的标志:
b2 --with-filesystem --build-type=complete --build-dir=.\build link=static runtime-link=static
这是它生成的文件列表:
libboost_filesystem-vc110-mt-s-1_51.lib
libboost_filesystem-vc110-mt-sgd-1_51.lib
libboost_filesystem-vc110-s-1_51.lib
libboost_filesystem-vc110-sgd-1_51.lib
libboost_system-vc110-mt-s-1_51.lib
libboost_system-vc110-mt-sgd-1_51.lib
libboost_system-vc110-s-1_51.lib
libboost_system-vc110-sgd-1_51.lib
然后我创建了一个新的Win32 DLL项目并添加了正确的 include/lib 目录。
但是当我尝试编译时,我得到以下输出:
LNK1104: cannot open file 'libboost_filesystem-vc110-mt-gd-1_51.lib
但是这个文件不存在,因为(afaik)它不是库的静态版本......
这很奇怪,因为我从来没有要求在我的项目中的任何地方链接到 DLL 版本!
那么为什么我的项目抱怨我从未要求使用的库呢?
boost headers 是否会自动尝试链接到它们相应的库?
我应该设置某种预处理器标志来告诉boost我想使用静态的单线程版本boost::filesystem
吗?
更新:
我在评论中被告知 boost实际上会尝试自动链接支持它的编译器,通过<boost/config/auto_link.hpp>
...
在几次尝试正确配置这些头文件以使用 boost 的静态、/MDd
(调试)和/MD
(发布)版本之后,我仍然收到此错误。
因此,如果有人能告诉我如何正确配置或禁用此功能,我会将其标记为答案。
另外,我是否正确假设libboost_filesystem-vc110-s-1_51.lib
并且libboost_filesystem-vc110-sgd-1_51.lib
是正确的/MD
和/MDd
库?
谢谢!