0

staticlib.a という名前のスタティック ライブラリに実装されている関数を使用するコードをコンパイルしようとしています。その関数の宣言を含む staticlib.h という名前のヘッダーもあります。staticlib.hを含むmain.cファイルに含まれている私のメインは、その関数のみを呼び出し、他には呼び出しません。したがって、gcc main.c staticlib.a でコンパイルすると、すべて正常に動作します。C++ の機能が必要ですが、main.cpp の main.c を適切に変更し、gcc main.cpp staticlib.a と同じようにコンパイルすると、関数への未定義の参照が発生します。どうすればこれを機能させることができますか? そして、なぜこの問題が発生したのですか?私が訪れたどのサイトにも説明が見つかりません...すべての回答に感謝します。

4

2 に答える 2

1

C と C++ のコンパイルは異なります。C++ は名前マングリング (オブジェクト ファイルに C++ 型情報を埋め込む) を使用します。この動作を停止して C++ から C コードにリンクできるようにするには、C ヘッダー ファイルをインクルードするときに C++ で extern C 構文を使用します。

こちらを ご覧ください http://www.cplusplus.com/forum/general/1143/

于 2012-10-18T14:50:26.707 に答える
1

ライブラリ内の関数を C++ 関数ではなく「C」関数として定義する必要があります - main.cpp でこれを行います

extern "C"
{
#include "staticlib.h"
}
于 2012-10-18T14:49:05.560 に答える