1

我正在使用带有 CodeComposerStudio 的 STL 编译一个混合 C/C++ 程序。我有很多编译器注释和链接错误

编译器备注

!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


为什么???看来我在那里缺少一个包含或一堆定义。

配置
CodeComposerStudio V3.3
DSP TMS320C2812
C2000 v5.2.5

4

1 回答 1

4

和的注释#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

链接器错误是一个不同的问题,无法通过#include 更多文件来解决。如果您缺少标头,则编译将失败。由于缺少代码,总是无法解析链接器符号。您可能没有链接必要的库或目标文件,或者代码可能已通过早期的条件编译被省略(错误#if...#endif块中的代码)。

于 2011-05-28T06:44:45.710 回答