2013-03-05 2 views
0

Я реализую программу, использующую библиотеки Boost. Программа скомпилирована на разных платформах. У меня нет проблем с Mac OS.Странное поведение при использовании boost на разных версиях платформы/gcc

Тот же код генерирует ошибки компилятора на разных платформах. Компиляторы разные: на 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' 

где бф определяется как 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#canonical


ПРИМЕЧАНИЕ: Некоторые другие ошибки, которые я только что исправил, относятся к этому типу. Я должен был написать:

obj.method1().method2() 

в

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

в противном случае я бы получить сообщение об ошибке.

Итак ... что случилось с моим вызовом boost::filesystem::canonical(...)?

ответ

2

Я бы (убежден), что вы используете версию 3 из boost::filesystem, что привело к существенным изменениям, включая добавление canonical(). Возможно, вам понадобится обновить свою установку boost или define BOOST_FILESYSTEM_VERSION, чтобы получить V3.

Даже если у вас установлен boost 1.53, вам нужно будет make sure that your code is being built against it. У вашей ОС может быть установленная по умолчанию версия. Например, репозиторий сжимания Debian (текущая стабильная версия) находится на уровне 1.42, который не содержит boost::filesystem V3.

+0

Спасибо, проблема была вызвана другой версией, выбранной CMake в сотрудничестве с ОС. –

Смежные вопросы