ar2015 ar2015 - 18 days ago 9
C++ Question

C++ BOOST undefined reference to `boost::filesystem::detail::copy_file

I have no clue why

boost::filesystem::copy_file
is making trouble for me.


undefined reference to `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;
}


I got no inspiration from the source code of boost or its 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);}


Even such a simple example does not work for me.

Platform:
Linux Ubuntu 64

Answer

There is a workaround for this problem, replace

#include <boost/filesystem.hpp>

with

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

Or, preferably, add -DBOOST_NO_CXX11_SCOPED_ENUMS to your compiler flags

Comments