1

別のプロジェクトから移植された 1 つの C++ プロジェクトをコンパイルしましたが、コンパイル後のリンク中に未定義のシンボル警告がいくつかあります。ポイントは、これらの警告が非常に奇妙だということです。それらは2つのタイプに分けられます:

タイプ 1:

dld: warning: Undefined symbol **'__record_needed_destruction'** in file './xxx/xx.o'
dld: warning: Undefined symbol **'__memzero'** in file './xxx/xyy.o'
dld: warning: Undefined symbol **'__vec_delete'** in file './xxx/xyz.o'
dld: warning: Undefined symbol **'__vec_new'** in file './xxx/yy/xxx/yyy.o'
dld: warning: Undefined symbol **'__pure_virtual_called'** in file './xxx/zzz.o'

重要な点は、これらの記号がソース コードで使用されていないことです。そこの警告の正確な手段は何ですか?

タイプ 2:

dld: warning: Undefined symbol in file './xxx/x1.o', './xxx/x2.o', './xxx/x3.o':
    nothrow__3std
    **std::nothrow**

ソースコードは以下です。

ApplicationSystem* pApplicationSystem = **new(std::nothrow)** ApplicationSystem{
.....
.....
}

同様のステートメントが 3 つの cpp ファイルに表示されます。std::nothrow の使用について何か問題がありますか?

4

1 に答える 1

4

コンパイラがオブジェクト ファイル (.o) をビルドした後、リンカーはそれらをリンクし、すべてのシンボル名 (関数呼び出しなど) をライブラリのアドレスに置き換える必要があります。しかし、あなたの場合、彼はこのアドレスを解決できません。

ライブラリの中でstdc++について言及していないようです。

おそらく、プロジェクト タイプを C++ に設定するか、コンパイラ名を gcc ではなく g++ に設定するか、ビルドに使用するコマンド ライン Eclipse にパラメーター -lstdc++ を追加する必要があります。

于 2009-10-13T05:33:36.713 に答える