我想使用boost::filesystem
的一些功能。
我可以包含boost/filesystem.hpp
和boost/filesystem/path.hpp
而没有任何问题,但只要我使用某些特定功能boost::filesystem::current_path()
或boost::filesystem::initial_path()
,我就会收到以下编译错误:< / p>
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
作为编译器代码。
提升的版本是通过自制软件安装的1.56.0。
编辑:我也尝试使用 boost 1.57.0 ,但错误是一样的。
答案 0 :(得分:1)
更新:这将在即将推出的Boost 1.60中修复。我的修复已经提交到Boost.Filesystem develop branch。您也可以将patch应用于早期版本的Boost。
原始回答: 这是Boost.Filesystem中的一个错误,跟踪为Boost Ticket #10591。我遇到了同样的问题并开发了一个我附加到bug的补丁。
如果您可以将修补程序应用于Boost.Filesystem来源的副本并报告它现在是否适合您,那就太棒了。
答案 1 :(得分:0)
对我来说这看起来像是一个Boost错误。静态链接与动态链接这些库之间应该没有区别。 Someone posted a fix here但没有解释发生了什么。
请注意,问题仍然存在于Boost 1.58中,这是撰写本文时的当前版本。
答案 2 :(得分:-1)
显然,Qt Creator与libboost-system.a
和libboost-filesystem.a
相关联。但在Mac OS X上,它应该链接到libboost-system.dylib
和libboost-filesystem.dylib
。
我通过使用.dylib
显式链接LIBS += "path/libboost-system.dylib"
- 库,在 .pro 文件中更改了此内容。这解决了这个问题。