いくつかのC++関数(STLを使用)がある場合、C ++コンパイラでコンパイルされていないメイン関数を持つプログラムからそれらを使用できますか?そして、そのプログラムをC ++コンパイラとリンクすることを避けることができますか?
インターフェイスはextern"C"関数である必要があり、例外をスローしてはならないことを認識しています。
Webを検索したところ、それが不可能であることを示唆する多くの情報源が見つかりました。たとえば、次のようになります。
- http://www.gnu.org/software/libtool/manual/html_node/C_002b_002b-libraries.html#C_002b_002b-libraries 「したがって、ldを実行してC++プログラムまたはライブラリをリンクすると失敗したと見なされます。」
- http://www.velocityreviews.com/forums/t591272-re-linking-ac-program-to-ac-library-which-uses-stl.html"C++ ライブラリを呼び出すCメインプログラムは始まり」
しかし、私もこれを見つけました: http ://wewantarock.wordpress.com/2010/11/01/working-around-the-static-libstdc-restriction/
私はこのように理解しました:回避策は共有ライブラリを構築することです。C ++コンパイラを使用して共有ライブラリをリンクします。共有ライブラリは、一種の「プログラム」そのものです(通常のメイン関数ではなく、DLLMainのようなスタートアップ/ティアダウン関数を使用します)。共有ライブラリを使用するプログラムは、それがC++ライブラリであることを知る必要はありません。
私はそれを正しく理解しましたか?
キャッチはありますか?
編集1:私はそれを試しました-成功しました。libtoolを使って共有ライブラリを構築し、通常のライブラリとリンクして使用できました
cc c_main_program.o -lmy_cpp_library -o c_main_program
実験が成功した後の更新された質問:後で私を驚かせる可能性のあるキャッチはありますか(たとえば、他のプラットフォームで、またはグローバル変数でコンストラクターを使用する場合...)