c++ boost linker-errors boost-filesystem

C++ BOOST referencia no definida para `boost:: filesystem:: detail:: copy_file



linker-errors boost-filesystem (2)

No tengo idea de por qué boost::filesystem::copy_file está causando problemas.

referencia indefinida a `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; }

No obtuve inspiración del código fuente de boost o su ayuda :

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

Incluso un ejemplo tan simple no funciona para mí.

Plataforma: Linux Ubuntu 64


Hay una solución para este problema, reemplace

#include <boost/filesystem.hpp>

con

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

O, preferiblemente, agregue -DBOOST_NO_CXX11_SCOPED_ENUMS a sus indicadores de compilación


No pude compilar un archivo que incluyera el encabezado boost/filesystem.hpp tampoco. Así lo resolví: comenté el line boost/filesystem.hpp y todas las líneas que usaban Boost, y luego compilé el archivo. Luego comencé a descomentar todas las líneas en los archivos y volví a compilar, y luego funcionó. ¡Estaba compilando con la bandera -lboost_system ambas ocasiones!