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__)

リンクエラー
UPDATED : 最新バージョンに更新することで修正されました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

4

1 に答える 1

4

#if 199901L <= STDC_VERSIONおよびの注釈#if GNUC < 3は、未定義のマクロの値のテストで、マクロがゼロに置き換えられるという事実に関するものです。したがって、この場合GNUC < 3は、コンパイラが GNUC でない場合でも当てはまります。これは、または他の GNUC 固有のマクロの以前のテストで修飾#if defined GNUC && GNUC < 3または囲まれている必要があります。defined GNUC

STDC_VERSION がゼロであると想定される場合、テスト #if 199901L <= STDC_VERSIONは常に false になります。このテストの標準マクロは、実際にはSTDC_VERSIONです。ただし、C++ コンパイルが使用される場合、適用される C 標準は無関係であるため、事前のテストdefined __cplusplusが適切な場合があります。

これらのマクロは通常、プリプロセッサによって事前定義されており、ヘッダーは必要ありません。標準、コンパイラ、アーキテクチャ、および OS を定義する定義済みマクロの詳細については、http://predef.sourceforge.net/prestd.htmlを参照してください。

リンカ エラーは別の問題であり、#include 追加ファイルでは解決できません。ヘッダーが欠落している場合、コンパイルは失敗します。コードの欠落が原因で、常に未解決のリンカ シンボルが発生します。必要なライブラリまたはオブジェクト ファイルをリンクしていないか、以前の条件付きコンパイルでコードが省略されている可能性があります (false#if...#endifブロック内のコード)。

于 2011-05-28T06:44:45.710 に答える