min*_*nda 9 c++ datetime boost visual-studio-2005
在编译引用混合的c ++托管/非托管代码的Visual Studio 2005项目时,我收到以下错误:
1> LINK:致命错误LNK1104:无法打开文件'libboost_date_time-vc80-mt-1_42.lib'
我遵循了入门指南.相关的是这个片段:
"Boost.DateTime有一个二进制组件,只有在你使用它的to_string/from_string或序列化功能时才需要,或者如果你的目标是Visual C++ 6.x或Borland."
我已经对"to_string"和"from_string"进行了全局搜索.这些DateTime方法的代码中没有出现.
在DateTime库本身的文档中,有以下代码段:
"该库有一些函数需要创建一个库文件(主要是to_string,from_string函数).大多数库用户可以有效地使用库而不构建库,但只需包含所需的头文件.如果需要库,build目录中的Jamfile将生成一个"静态"库(libboost_date_time)和一个包含这些函数的"动态/共享"库(boost_date_time)."
我如何解决这个问题?简单的解决方案是构建库或使用来自BoostPro的Windows二进制安装程序,但是根据文档我不需要编译库,这使我感到困扰.
另一个问题是DateTime文档似乎表明它的"主要是to_string,from_string",我的代码可能会引用一些需要创建库文件的其他函数吗?有谁知道其他功能包括在内?是否有自己环绕的函数或调用to_string或from_string?
我使用的唯一包含是:
#include <boost/date_time/gregorian/gregorian.hpp>
Run Code Online (Sandbox Code Playgroud)
小智 11
只需添加:
#define BOOST_DATE_TIME_NO_LIB
Run Code Online (Sandbox Code Playgroud)
在您的代码中包含boost标头之前,例如:
#define BOOST_DATE_TIME_NO_LIB
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
....
....
Run Code Online (Sandbox Code Playgroud)
我希望它会有所帮助,在我看来它是有效的.
在执行以下故障排除后,项目将干净地编译并链接:
我定义了BOOST_LIB_DIAGNOSTIC-看看我可以从自动链接器获得什么诊断输出。不太翔实:
1>链接到lib文件:libboost_date_time-vc80-mt-1_42.lib
1> LINK:致命错误LNK1104:无法打开文件'libboost_date_time-vc80-mt-1_42.lib'
然后,我定义了BOOST_ALL_NO_LIB = 1-禁用所有自动链接。项目现在可以干净地编译和链接。
Boost头文件使用pragma指示编译器何时查找lib文件。虽然date_time库不执行此操作,但boost中的其他标头取决于do。