提升库要求我认为没有必要的库文件
Boost library demanding lib file that I believe is not necessary
我正在使用供应商提供的一些自动生成的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时,才需要它。
我不需要任何需要编译库的功能,并且在我的代码中根本没有引用任何功能,只是添加了包含。那么为什么它要求这个文件呢?另外,它怎么知道需要什么文件?其中一个头文件中是否隐藏了偷偷摸摸的 #pragma?我开始寻找,但有太多的路要走。
供应商确实为 Boost.DateTime 提供了一个编译的 dll 和 lib 文件,但它被命名为"boost_date_time-vc140-mt-gd-1_38.lib",编译器正在寻找的文件前面有前缀"lib"。如果它确实需要它,那么如何将链接器定向到正确的文件?我知道我可以将文件名更改为链接器正在寻找的名称(链接器已经具有包含该文件的文件夹的路径,与此无关(,但由于此代码来自供应商代码生成软件,因此它将经常恢复为原始文件名, 所以这不是一个最佳解决方案。
与往常一样,感谢您提供的任何帮助。
正如tkausl在评论中提到的,头文件中有一个 #pragma 注释试图加载库。
通过在"#include "boost\date_time.hpp"行之前添加"#define BOOST_ALL_NO_LIB"行,这解决了问题,因为定义的宏告诉 Boost 不要加载 lib 文件。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到