#c #templates #boost #compilation #compiler-errors
#c #шаблоны #boost #Сборник #ошибки компилятора
Вопрос:
У меня есть среда разработки Linux с g 3.4.6, boost 1.47 (последняя версия) и Insure . До того, как я добавил boost, все компилировалось нормально. После того, как я попытался скомпилировать простой тест, используя только библиотеки заголовков boost, я получаю это:
11/3/11 8:58:37 AM CET: insure g -Zstl -Zop /root/.pulse2-agent/data/work/insure/shared/misc/insure.opt -c -DXF_PROFILE -o temp/linux_x86/test_boost.o -Wall -Werror -pthread -g -I. -I../../../shared/libs/libtommath-0.41 -I../../../shared/libs/expat-1.95.8/lib -I../../../shared/generic -I../../../shared/test -I../../../shared/libs/sentinel_hasp -I../../../shared/libs/sqlite -I../../../shared/generated -I/boost test_boost.cpp
11/3/11 8:58:37 AM CET: [container_fwd.hpp:64] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class charT, class traits, class Allocator> class basic_string;
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: [container_fwd.hpp:87] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class T, class Allocator> class vector;
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: [container_fwd.hpp:88] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class Key, class T, class Compare, class Allocator> class map;
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: [container_fwd.hpp:89] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class Key, class T, class Compare, class Allocator>
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: [container_fwd.hpp:91] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class Key, class Compare, class Allocator> class set;
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: [container_fwd.hpp:92] **PARSE_ERROR**
11/3/11 8:58:37 AM CET: Parse error.
11/3/11 8:58:37 AM CET: >> template <class Key, class Compare, class Allocator> class multiset;
11/3/11 8:58:37 AM CET: too few template parameters -- does not match previous declaration
11/3/11 8:58:37 AM CET: Driver: error executing "Run "-Zoicompiler /usr/local/bin/g " -Zstl -Zop /root/.pulse2-agent/data/work/insure/shared/misc/insure.opt -c -DXF_PROFILE -o temp/linux_x86/test_boost.o -Wall -Werror -pthread -g -I. -I../../../shared/libs/libtommath-0.41 -I../../../shared/libs/expat-1.95.8/lib -I../../../shared/generic -I../../../shared/test -I../../../shared/libs/sentinel_hasp -I../../../shared/libs/sqlite -I../../../shared/generated -I/boost test_boost.cpp"
Без Insure он компилируется просто отлично. К сожалению, я не могу сменить компилятор на новый из-за внутренней структуры проекта.
Есть идеи, в чем реальная проблема и как я могу это решить?
/редактировать
Я где-то читал, что проблемы такого рода могут быть вызваны неправильными объявлениями forward в самом boost. Итак, я добавил в свой тест заголовки before boost:
#define BOOST_DETAIL_NO_CONTAINER_FWD
И теперь он не сообщает о каких-либо проблемах, но полностью падает во время компиляции:
insure g -Zstl -Zop /root/x-formation-pk/shared/misc/insure.opt -c -DXF_PROFILE -o temp/linux_x86/test_boost.o -Wall -Werror -pthread -g -I. -I../../../shared/libs/libtommath-0.41 -I../../../shared/libs/expat-1.95.8/lib -I../../../shared/generic -I../../../shared/test -I../../../shared/libs/sentinel_hasp -I../../../shared/libs/sqlite -I../../../shared/generated -I/boost test_boost.cpp
Driver: error executing "Run "-Zoicompiler /usr/local/bin/g " -Zstl -Zop /root/x-formation-pk/shared/misc/insure.opt -c -DXF_PROFILE -o temp/linux_x86/test_boost.o -Wall -Werror -pthread -g -I. -I../../../shared/libs/libtommath-0.41 -I../../../shared/libs/expat-1.95.8/lib -I../../../shared/generic -I../../../shared/test -I../../../shared/libs/sentinel_hasp -I../../../shared/libs/sqlite -I../../../shared/generated -I/boost test_boost.cpp"
makepp: error: Failed to build targets `/root/x-formation-pk/shared/generic/test/temp/linux_x86/test_boost.lob' `/root/x-formation-pk/shared/generic/test/temp/linux_x86/test_boost.o' [2]
Комментарии:
1. Попробуйте Valgrind вместо Insure .
2. Insure уже интегрирован с нашей средой сборки и системой непрерывной интеграции в Linux, Windows и Solaris, поэтому у меня нет возможности заменить его на Valgrind.
3. Поскольку ваш g выпущен в 2006 году, рассмотрите более старую версию Boost. (например, 1.37.0 от 2008)
4. Не повезло с этой версией, проблема была еще хуже. За исключением сообщений об ошибках (таких же, как и раньше) Я также получил сбой…
5. Вы спрашивали Parasoft об этой проблеме?
Ответ №1:
На самом деле я получаю подтверждение от Parasoft, что я обнаружил ошибку. Они попытаются это исправить, проблема уже создана.