C++ BOOST 未定义对 'boost::filesystem::d etail::copy_file 的引用
C++ BOOST undefined reference to `boost::filesystem::detail::copy_file
我不知道
boost::filesystem::copy_file
为什么要给我制造麻烦。
未定义对'boost::文件系统::d etail::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 的源代码或其帮助中获得灵感:
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
此问题有一个解决方法,请替换
#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
添加到编译器标志中
如果遇到此问题,请确保在调用 g++ 时同时包含 -lboost_system
和 -lboost_filesystem
示例工作生成文件
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);
}
我也无法编译包含标头boost/filesystem.hpp
的文件。这就是我解决它的方式:我注释掉了行boost/filesystem.hpp
和所有使用 Boost 的行,然后编译了文件。然后我取消注释了文件中的所有行并再次编译,然后它起作用了。我两次都用旗帜-lboost_system
编译!
在较旧的加速版本中,它是 BOOST_NO_SCOPED_ENUMS
,而不是BOOST_NO_CXX11_SCOPED_ENUMS
请参阅 boost::文件系统::copy_file() 缺少 C++11 中的符号
相关文章:
- std::filesystem::copy throws filesystem_error
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- QML/C++/QObject Struct Copy
- C++赋值运算符,我们可以用 copy 替换它吗?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 如何使用 std::copy 当类有"无符号字符和运算符[]"时
- std::copy 导致运行时检查失败 #2
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 为什么使用 <uint8_t>MSVC 2015 编译器的 std::vector::insert 比 std::copy 快 5 倍?
- 对于输出,std::copy是否比std::cout快
- C++中的'deep copy'构造函数
- 复制初始化:为什么即使关闭了复制省略,也没有调用move或copy构造函数
- Qt中的QFile::copy(source,dest)的实现有时是错误的吗?
- 有些时候,阶级必须"default copy c'tor" ?当我做"new Type[..]"时会发生什么?
- MSVC++ 17 std::copy 期望自定义迭代器的"operator -"
- 调用了Copy ctor而不是move ctor