由于 mac 上的"_fchmodat",使用 boost::文件系统失败



我想使用boost::filesystem的一些函数。

我可以毫无问题地包含boost/filesystem.hppboost/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.alibboost-filesystem.a相关联。但是在Mac OS X上,它应该链接到 libboost-system.dyliblibboost-filesystem.dylib

我通过使用 LIBS += "path/libboost-system.dylib" 显式链接到 .dylib 库来在 .pro 文件中更改了这一点。这解决了问题。

最新更新