Ошибка связи STL с CodeComposerStudio - PullRequest
1 голос
/ 27 мая 2011

Я компилирую смешанную программу на C / C ++ с использованием STL и CodeComposerStudio. У меня много замечаний компилятора и ошибок ссылок

Замечания компилятора

!defined(__MINGW32__)

!defined(__MINGW32__) "C:/CCStudio_v3.3/C2000_v5.2.5/include/yvals.h",
 line 470: remark #195-D: zero
           used for undefined preprocessing identifier    #if
 199901L <= __STDC_VERSION__
                   ^ "C:/CCStudio_v3.3/C2000_v5.2.5/include/exception", line 181: remark #195-D: 
           zero used for undefined preprocessing identifier    #if
 __GNUC__ < 3 && !defined(__APPLE__) && !defined(__MINGW32__)!defined(__MINGW32__)

ошибки ссылок
ОБНОВЛЕНО: Исправлено путем обновления rts2800_ml.lib до последней версии (аналогично компилятору).

error: unresolved symbols remain  undefined                          
 ---------
 std::_Raise_handler                
 std::_Throw(const std::exception &)
 std::_String_base::_Xlen() const   
 std::_String_base::_Xran() const   

 error: unresolved symbols remainerror: unresolved symbols remain

Вопрос
Зачем ??? Кажется, мне не хватает включения или группы определений там.

Config
CodeComposerStudio V3.3
DSP TMS320C2812
C2000 v5.2.5

1 Ответ

4 голосов
/ 28 мая 2011

Примечания для #if 199901L <= STDC_VERSION и #if GNUC < 3 относятся к тому факту, что в тесте на значение неопределенного макроса макрос заменяется на ноль. Так что в этом случае GNUC < 3 будет истинно, даже если компилятор не GNUC. Он должен быть квалифицирован как #if defined GNUC && GNUC < 3 или заключен в более ранний тест для defined GNUC или другого специфического макроса GNUC.

Если STDC_VERSION предполагается равным нулю, тогда проверка #if 199901L <= STDC_VERSION всегда будет ложной. Стандартный макрос для этого теста на самом деле STDC_VERSION . Однако применяемый стандарт C не имеет значения, если используется компиляция C ++, поэтому может подойти предварительный тест для defined __cplusplus.

Эти макросы обычно предопределены препроцессором и не требуют заголовка. Подробнее о предопределенных макросах, определяющих стандарты, компиляторы, архитектуры и ОС, см. http://predef.sourceforge.net/prestd.html

Ошибки компоновщика - это другая проблема, которая не может быть устранена # включением других файлов. Если вы пропустили заголовок, компиляция не удалась. Неразрешенные символы компоновщика неизменно из-за отсутствия кода. Возможно, вы не связали необходимую библиотеку или объектный файл, или код мог быть пропущен при более ранней условной компиляции (код в ложном блоке #if...#endif).

...