Oracle® Developer Studio 12.5: C++ ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

14.7 C API を持つライブラリの構築

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

C インタフェースライブラリで C++ の実行時サポートを必要とし (たとえば、クラス型関数または C++ ライブラリ関数を内部で使用する)、しかも C コンパイラ cc とリンクしている場合は、次に記述するように適切な C++ 実行時ライブラリともリンクする必要があります。

静的 (アーカイブ) ライブラリの代わりに動的 (共有) ライブラリを作成する必要があります。動的ライブラリは自己完結型で、依存する C++ 実行時ライブラリへの独自の参照を持ちます。静的ライブラリを作成する場合、ライブラリのユーザーが C++ 実行時ライブラリをユーザーのプログラムにリンクする必要があり、CC (cc ではない) を使用してプログラムをリンクするか、CC が生成する ld コマンド行を複製することが必要になります。

動的ライブラリを作成するときは、使用中のコンパイルモード (-compat=x, -std=x) に関連付けられた C++ 実行時ライブラリのリストを表示します。これらのライブラリの一覧は、動的 (共有) ライブラリの構築にあります。

C++ 実行時ライブラリに依存せずにライブラリを構築できることもあります。少なくとも、これらのガイドラインに従う必要があります。

  • 配列形式の new または delete を使用しない。

  • 独自のバージョンの operator new および operator delete を提供しないかぎり、単一オブジェクト形式の new または delete を使用しない。

  • 例外を使用しない(–noex でコンパイルします。)

  • 実行時の型識別機構 (RunTime Type Information、RTTI) を使用しない(–features=no%rtti でコンパイルします。)

  • dynamic_cast を使用しない。

  • 標準の C++ ヘッダーを使用しない。