Question

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() );

.....
Was it helpful?

Solution

I solved the problem by adding to N.cpp:

#ifndef BOOST_ALL_DYN_LINK
#   define BOOST_ALL_DYN_LINK
#endif 
#include <boost/filesystem.hpp>

OTHER TIPS

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 ;-) ).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top