Как заставить Insure работать с boost и g 3.4.x

#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, что я обнаружил ошибку. Они попытаются это исправить, проблема уже создана.