由于 mac 上的"_fchmodat",使用 boost::文件系统失败
Using boost::filesystem fails due to "_fchmodat" on mac
我想使用boost::filesystem
的一些函数。
我可以毫无问题地包含boost/filesystem.hpp
和boost/filesystem/path.hpp
,但是一旦我将某些特定函数用作boost::filesystem::current_path()
或boost::filesystem::initial_path()
,我就会收到以下编译器错误:
Undefined symbols for architecture x86_64:
"_fchmodat", referenced from:
boost::filesystem::detail::permissions(boost::filesystem::path const&,
boost::filesystem::perms, boost::system::error_code*) in
libboost_filesystem.a(operations.o)
ld: symbol(s) not found for architecture x86_64
我正在链接-lboost-system
和-lboost-filesystem
,并且我使用-std=c++0x
作为编译器标签。
boost的版本是通过自制软件安装的1.56.0。
编辑:我也尝试使用boost 1.57.0,但错误是相同的。
更新:这将在即将推出的 Boost 1.60 中修复。我的修复程序已经提交到 Boost.Filesystem 开发分支。您还可以将修补程序应用于早期版本的 Boost。
原答案:这是 Boost.File System 中的一个错误,被跟踪为 Boost Ticket #10591。我遇到了同样的问题,并开发了一个补丁,并将其附加到错误中。
如果您可以将补丁应用于Boost.Filesystem源代码的副本并报告它现在是否适合您,那就太好了。
这对我来说看起来像一个 Boost 错误。静态链接与动态链接这些库之间应该没有区别。有人在这里发布了一个修复程序,但没有解释发生了什么。
请注意,问题在 Boost 1.58(撰写本文时的当前版本)中仍然存在。
显然Qt Creator与libboost-system.a
和libboost-filesystem.a
相关联。但是在Mac OS X上,它应该链接到 libboost-system.dylib
和libboost-filesystem.dylib
。
我通过使用 LIBS += "path/libboost-system.dylib"
显式链接到 .dylib
库来在 .pro 文件中更改了这一点。这解决了问题。
- boost::文件系统::recursive_directory_iterator多线程安全
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 将 boost::文件系统::p ath 转换为 char?
- 程序使用boost::文件系统链接clang,但不使用gcc
- 为什么 boost 文件系统和 libpq-fe 标头不会在同一个文件中编译
- boost::文件系统递归获取每个文件的大小
- boost::文件系统::create_directory抛出了一个提升::文件系统::filesystem_error
- 针对 QNX 交叉编译后,boost 文件系统 (1.63) 失败并出现未定义的引用错误
- ctime 包含 boost::文件系统时出错
- 获取“boost::文件系统::p ath”字符指针时出现问题
- 添加 boost 文件系统.hpp 无法编译
- Boost文件系统路径中的分割故障
- Boost文件系统存在访问违规
- C++17 相当于 boost::文件系统::unique_path()
- C++ boost::文件系统如何检测路径是文件还是目录
- Cygwin目录迭代器中的Boost文件系统
- 使用boost ::文件系统库中的输出中的奇怪字符
- 如何确保 boost::文件系统::remove 不会尝试删除由其他进程使用的文件
- 尽管使用了boost_NO_CXX11_SCOPED_ENUMS,但boost::文件系统出现未定义的引用错误
- 简单Boost文件系统访问冲突