Подтвердить что ты не робот

С++ BOOST undefined ссылка на `boost:: filesystem:: detail:: copy_file

У меня нет подсказки, почему boost::filesystem::copy_file создает проблемы для меня.

undefined ссылка на `boost:: filesystem:: detail:: copy_file

// g++ -std=c++11 test.cpp -lboost_filesystem -lboost_system -lrt -lboost_wave

#include <boost/filesystem.hpp>

int main()
{

    boost::filesystem::create_directory("aaa");
    // ok


    boost::filesystem::copy_file("f1","f2");
    // /tmp/ccNWZltB.o: In function `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)':
    // test.cpp:(.text._ZN5boost10filesystem9copy_fileERKNS0_4pathES3_[_ZN5boost10filesystem9copy_fileERKNS0_4pathES3_]+0x26): undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
    // collect2: error: ld returned 1 exit status


    return 0;
}

Я не получил вдохновения из исходного кода boost или его help:

  inline
  void copy_file(const path& from, const path& to,   // See ticket #2925
                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec)
                                       {detail::copy_file(from, to, option, &ec);}

Даже такой простой пример не работает для меня.

Платформа: Linux Ubuntu 64

4b9b3361

Ответ 1

Существует обходной путь для этой проблемы, замените

#include <boost/filesystem.hpp>

с

#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
#undef BOOST_NO_CXX11_SCOPED_ENUMS

Или, желательно, добавьте -DBOOST_NO_CXX11_SCOPED_ENUMS к вашим флагам компилятора

Ответ 2

Я не смог скомпилировать файл, включающий заголовок boost/filesystem.hpp. Вот как я это решил: я прокомментировал строку boost/filesystem.hpp и все строки, которые использовали Boost, а затем скомпилировали файл. Затем я раскомментировал все строки в файлах и скомпилировал их снова, а затем он сработал. Я собирал с флагом -lboost_system оба раза!