Ich habe keine Ahnung, warum boost::filesystem::copy_file
mir Probleme macht.
undefinierter Verweis auf `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;
}
Der Quellcode von boost oder sein 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);}
Selbst ein solches einfaches Beispiel funktioniert für mich nicht.
Plattform: Linux Ubuntu 64
Es gibt eine Problemumgehung für dieses Problem, zu ersetzen
#include <boost/filesystem.hpp>
mit
#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
#undef BOOST_NO_CXX11_SCOPED_ENUMS
Oder fügen Sie Ihren Compiler-Flags vorzugsweise -DBOOST_NO_CXX11_SCOPED_ENUMS
hinzu
Wenn Sie auf dieses Problem stoßen, müssen Sie unbedingt -lboost_system
und -lboost_filesystem
in Ihren Aufruf von g ++ aufnehmen
BINARY = output
FILE_OBJECTS = main.o fileLoader.o
BOOST = -lboost_system -lboost_filesystem
GCC = g++ -std=c++17
FLAGS = -Wall -pedantic -Wextra
build: $(FILE_OBJECTS)
$(GCC) $(FLAGS) $(FILE_OBJECTS) -o $(BINARY) $(BOOST)
main.o: main.cpp fileLoader.o
$(GCC) $(FLAGS) -c main.cpp
fileLoader.o: fileLoader.cpp
$(GCC) $(FLAGS) -c fileLoader.cpp
clean:
rm -rf *.o $(BINARY)
#include <boost/filesystem.hpp>
void create_data_file(std::string file_path)
{
boost::filesystem::path p(file_path);
boost::filesystem::create_directory(p);
}
Ich konnte auch keine Datei kompilieren, die den Header boost/filesystem.hpp
enthielt. So habe ich es gelöst: Ich habe die Zeile boost/filesystem.hpp
und alle Zeilen, die Boost verwendet haben, auskommentiert und dann die Datei kompiliert. Ich habe dann alle Zeilen in den Dateien auskommentiert und erneut kompiliert, und dann hat es funktioniert. Ich habe beide Male mit der Flagge -lboost_system
kompiliert!