5

この質問 (オブジェクト指向 C++ コード用の C ラッパー API の開発)に対する回答に従って、 C++ コード用の C ラッパーを作成することができました。

gcc のみを使用して (g++ ではなく) 使用、コンパイル、およびリンクできる静的ライブラリ (g++ を使用してコンパイル) にラッパーをコンパイルおよびリンクしたいと考えています。このようにして、ライブラリのユーザーはライブラリが C++ で書かれていることを気にする必要がなくなります。

これは可能ですか?

4

2 に答える 2

2

このリンクでは、いくつかのコンパイラ オプションとシナリオについて説明しています: http://docs.oracle.com/cd/E19422-01/819-3690/Building.Libs.html 具体的には:

> 16.7 C API を持つライブラリのビルド

C++ で書かれているが C プログラムで使用できるライブラリを構築する場合は、C API (アプリケーション プログラミング インターフェイス) を作成する必要があります。これを行うには、エクスポートされたすべての関数を extern "C" にします。これは、グローバル関数に対してのみ実行でき、メンバー関数に対しては実行できないことに注意してください。

C インターフェイス ライブラリに C++ ランタイム サポートが必要であり、cc を使用してリンクする場合、C インターフェイス ライブラリを使用するときは、アプリケーションを libC (互換モード) または libCrun (標準モード) とリンクする必要もあります。(C インターフェイス ライブラリが C++ ランタイム サポートを必要としない場合は、libC または libCrun とリンクする必要はありません。) リンクの手順は、アーカイブ ライブラリと共有ライブラリで異なります。

アーカイブされた C インターフェイス ライブラリを提供する場合は、ライブラリの使用方法に関する指示を提供する必要があります。

C インターフェイス ライブラリが標準モード (デフォルト) の CC でビルドされた場合、C インターフェイス ライブラリを使用するときに -lCrun を cc コマンド ラインに追加します。C インターフェイス ライブラリが互換モード (-compat) の CC でビルドされた場合は、C インターフェイス ライブラリを使用するときに、cc コマンド ラインに -lC を追加します。共有 C インターフェイス ライブラリを提供する場合、ライブラリをビルドするときに libC または libCrun への依存関係を作成する必要があります。共有ライブラリに正しい依存関係がある場合、ライブラリを使用するときに -lC または -lCrun をコマンド ラインに追加する必要はありません。

C インターフェイス ライブラリを互換モード (-compat) でビルドする場合は、ライブラリをビルドするときに -lC を CC コマンド ラインに追加します。C インターフェイス ライブラリを標準モード (デフォルト) でビルドする場合は、ライブラリをビルドするときに -lCrun を CC コマンド ラインに追加します。C++ ランタイム ライブラリへの依存関係を削除する場合は、ライブラリ ソースで次のコーディング ルールを適用する必要があります。

独自の対応するバージョンを提供しない限り、new または delete の形式を使用しないでください。例外を使用しないでください。ランタイム型情報 (RTTI) を使用しないでください。

于 2013-08-13T18:56:46.937 に答える