在不同平台/gcc版本上使用boost时的奇怪行为
Weird behaviour while using boost on different platform/gcc versions
我正在使用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。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 正在查找文档以获得PS4平台的C++中的设备信息
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- thread_specific_pointer可以在哪些平台上工作而无需 boost::thread?
- 在网络上的不同平台上比较boost :: typeIndex type hash_code()是安全的吗?
- 如何从Boost获取平台ID
- 在目标平台上编译 Boost 自己是否有意义
- 为不受支持的平台调整Boost线程/进程
- 如何在 x86 和 x64 平台之间使用 boost::序列化
- windows上的boost.asio错误代码依赖于平台
- 如何查找不包含任何平台特定代码的Boost库
- 使用 Boost.File system 获取平台的路径分隔符
- 在不同平台/gcc版本上使用boost时的奇怪行为