在不同平台/gcc版本上使用boost时的奇怪行为

Weird behaviour while using boost on different platform/gcc versions

本文关键字:boost 平台 gcc 版本      更新时间:2023-10-16

我正在使用Boost库实现一个程序。该程序在不同的平台上编译。我在Mac OS上没有问题。

相同的代码在不同的平台上产生编译错误。编译器是不同的:在Mac OS上我使用gcc 4.2,在Linux上gcc 4.4,…

然而,有一些错误是很难解释的。

我正在使用Boost 1.5.3。例如,我有这个奇怪的消息:

In member function 'std::vector<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > >* FolderReader::get_filenames()':
/home/u/projects/prj/src/batch/folderreader.cpp:119: error: 
   'canonical' is not a member of 'bf'

其中bf定义为namespace bf = boost::filesystem;

canonical()被这样调用:bf::canonical(pp).string()pp集合:

for(bf::directory_iterator it = bf::directory_iterator(p); it != bf::directory_iterator(); it++) {
    bf::path pp = *it;
...

但是,它应该根据这里的API工作:http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html规范


注意:我刚才更正的其他一些错误也是这种类型的。我不得不写:

obj.method1().method2()

class2 &obj2 = obj.method1();
obj2.method2();

否则我将收到一个错误消息。

所以…我的boost::filesystem::canonical(...)调用有什么问题?

我会确保您使用的是boost::filesystem的版本3,这是一个重大的变化,包括canonical()的添加。您可能需要升级您的boost安装或定义BOOST_FILESYSTEM_VERSION以获得V3。

即使你已经安装了boost 1.53,你也需要确保你的代码是针对它构建的。您的操作系统可能有一个默认版本。例如,Debian压缩存储库(当前的稳定版本)在boost 1.42上,根本不包含boost::filesystem V3。