1

我有一个大项目。

N.cpp我需要使用boost::filesystem::exists(path)来检查路径是否有效。

为此,我包括<boost/filesystem.hpp>

我收到以下错误:

Error    2    error LNK2005: "public: enum boost::filesystem::file_type __cdecl boost::filesystem::file_status::type(void)const " (?type@file_status@filesystem@boost@@QEBA?AW4file_type@23@XZ) already defined in N.obj    D:\MProject\DA\boost_filesystem-vc100-mt-gd-1_53.lib(boost_filesystem-vc100-mt-gd-1_53.dll)    DA

Error    1    error LNK2005: "public: __cdecl boost::filesystem::path::~path(void)" (??1path@filesystem@boost@@QEAA@XZ) already defined in N.obj    D:\MProject\DAboost_filesystem-vc100-mt-gd-1_53.lib(boost_filesystem-vc100-mt-gd-1_53.dll)    DA

Error    3    error LNK1104: cannot open file 'libboost_filesystem-vc100-mt-gd-1_53.lib'    D:\MProject\DA\LINK    DA

如果我不包含头文件,我会得到:

Error    2    error C3861: 'exists': identifier not found    D:\MProject\DA\ThirdParty\N.cpp    108    1    DA
Error    1    error C2653: 'boost' : is not a class or namespace name    D:\MProject\DA\ThirdParty\N.cpp    108    1    DA

什么是正确的使用方法boost::filesystem::exists以便整个编译?

N.cpp

#include <boost/filesystem.hpp>
.....
CHECK( boost::filesystem::exists(*i), std::string("file ").append(*i).append(" does not exist").c_str() );

.....
4

2 回答 2

5

我通过添加到 N.cpp 解决了这个问题:

#ifndef BOOST_ALL_DYN_LINK
#   define BOOST_ALL_DYN_LINK
#endif 
#include <boost/filesystem.hpp>
于 2014-02-03T15:38:06.147 回答
3

如果你想使用boost::filesystem你必须包含头文件(直接或间接通过其他包含)。

前三个错误是链接器错误。Boost 的某些部分仅是头文件,即当您想使用它们时不必编译 Boost。不幸的是,文件系统不是其中之一。这意味着你必须像这里描述的那样编译 Boost 。之后你必须告诉你的链接器它在哪里可以找到你刚刚创建的二进制文件并且它应该编译得很好(如果你没有犯任何其他错误;-))。

于 2014-02-03T15:01:54.740 回答