CライブラリにリンクしているCライブラリやC++ライブラリに多くの質問と回答がありましたが、C++にリンクしているC++ライブラリがありますCとC++を混在させる人々と同じ症状(リンク時の未定義参照)。g ++を使用してC++ dllにリンクするC++ライブラリ
は、これは私のG ++ラインです:
g++ -L C:/MyLibraries mycode.cpp -shared -o mycode.dll -lopengl32 -lglu32 -lgdi32 -lMyLibrary
私は、次のラップ私のヘッダ持っていることについて、これまでの協議に遭遇したすべての答え:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
しかし、私のライブラリは、純粋なCでの++、 100%クラス、グローバル関数はありません。extern "C"が犠牲にすることはできません(extern "C"はクラスのメソッドではできず、extern "C"リンク時の未定義参照)。
Visual Studio 2010でMyLibrary.libが記述されました。また、Visual Studio 2005と2008を使用して多数のライブラリを作成しました。extern "C"を必要とする人は1人もいませんでした。スタジオベースのプロジェクト。他のC++プロジェクトにリンクされているC++ライブラリ。問題はありません。
これは、Visual Studioがg ++が処理するものですか?静的に多数の自分のC++カスタム静的ライブラリを他のC++プロジェクトにリンクすることができます。 Visual Studioはそれ自身のC++メソッド名のマングルを解読するほどスマートですか?今までこれまで実行したことはありませんか?しかし、g ++は何をすべきか分からず、Cネーミング規則を強制させる必要があります(私は100%C++です)。
また、g ++を使用していても、まだ標準のCルールを適用しているという問題がありますか?私のg ++コマンドラインに何か問題がありますか?
dll関数をエクスポートするためのMSDNの回答を探していても、「C関数をC++実行可能ファイルにエクスポート」や「エクスポート」などのテーマがあるため、g ++行に問題があります。 C++の関数をCの実行可能ファイルに変換する "という、C++の関数をC++の実行可能ファイルにエクスポートするリンクはありません。コンパイルされた関数で__declspec(dllexport)を試しましたが、まだg ++とのリンクは未定義です。何か案は?
ありがとうございます。