Включая заголовок файловой системы Boost

У меня большой проект.

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

.....

2 ответа

Решение

Я решил проблему, добавив в N.cpp:

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

Если вы хотите использовать boost::filesystem Вы должны включить заголовочный файл (прямо или косвенно через другие включения).

Первые три ошибки являются ошибками компоновщика. Некоторые части Boost предназначены только для заголовков, т.е. вам не нужно компилировать Boost, когда вы хотите их использовать. К сожалению, файловая система не входит в их число. Это означает, что вы должны скомпилировать Boost, как описано здесь. После этого вы должны сообщить своему компоновщику, где он может найти только что созданные вами двоичные файлы, и он должен хорошо скомпилироваться (если вы не делали никаких других ошибок;-)).

Другие вопросы по тегам