问题
I have a big project.
In N.cpp
I need to use boost::filesystem::exists(path)
to check if the path is valid.
For that, I include <boost/filesystem.hpp>
I get the following error:
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
If I do not include the header file, I get:
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
What is the right way to use boost::filesystem::exists
so that the whole thing would compile?
N.cpp
#include <boost/filesystem.hpp>
.....
CHECK( boost::filesystem::exists(*i), std::string("file ").append(*i).append(" does not exist").c_str() );
.....
回答1:
I solved the problem by adding to N.cpp:
#ifndef BOOST_ALL_DYN_LINK
# define BOOST_ALL_DYN_LINK
#endif
#include <boost/filesystem.hpp>
回答2:
If you want to use boost::filesystem
you have to include the header file (directly or indirectly via other includes).
The first three errors are linker errors. Some parts of Boost are header-only, i.e. you don't have to compile Boost when you want to use them. Unfortunately filesystem isn't one of them. That means you have to compile Boost like described here. Afterwards you have to tell your linker where it can find the binaries you just created and it should compile well (if you didn't do any other mistakes ;-) ).
来源:https://stackoverflow.com/questions/21530297/including-the-boost-filesystem-header