我正在使用供应商提供的一些自动生成的C ++代码。他们广泛使用Boost库,因此,我还需要使用boost库来创建适当的对象以作为输入发送给供应商方法。它们在自动生成的代码的lib文件夹中提供所有Boost头文件。
我以前从未使用过Boost,但是从过去几天收集的数据来看,它大部分是仅标头的库,对我而言,这意味着不需要* .dlls或* .lib文件可以在我的软件中使用它,前提是我不使用列出的功能,而这些功能确实需要lib文件。
我遇到的问题是,当我尝试包含“ boost \ date_time.hpp”时,我得到一个LNK1104错误“无法打开文件libboost_date_time-vc140-mt-gd-1_38.lib”。我注意到在Boost网站上,它说某些库确实具有可选的编译库,这取决于是否使用了某些功能。对于date_time,它表示以下内容:
“ Boost.DateTime具有二进制组件,仅当您使用其to_string / from_string或序列化功能,或者目标是Visual C ++ 6.x或Borland时才需要。”
我不需要任何需要编译库的功能,并且在我的代码中根本没有引用任何功能,只需添加include。那为什么要这个文件呢?此外,它甚至如何知道需要什么文件?头文件之一中隐藏了偷偷摸摸的#pragma吗?我开始看,但是走的路太多了。
供应商确实为Boost.DateTime提供了一个已编译的dll和lib文件,但是它被命名为“ boost_date_time-vc140-mt-gd-1_38.lib”,编译器正在寻找的文件的前缀为“ lib”。面前。如果确实需要它,那么如何将链接器定向到正确的文件?我知道我可以将文件名更改为链接程序正在查找的文件(链接程序已经具有包含该文件的文件夹的路径,与它无关),但是由于此代码来自供应商代码生成软件它会经常恢复为原始文件名,因此这不是最佳解决方案。
一如既往,感谢您能提供的任何帮助。
答案 0 :(得分:0)
正如tkausl在注释中提到的那样,在头文件中有一个#pragma注释试图加载lib。
通过在“ #include“ boost \ date_time.hpp”''行之前添加“ #define BOOST_ALL_NO_LIB”行,这解决了该问题,因为已定义的Macro告诉Boost不要加载lib文件。