編集: それが重要な場合に備えて、明確にする必要があると思います。私はAIXUnixボックスを使用しているので、VACコンパイラーを使用しています。gnuコンパイラーは使用していません。 編集を終了
私はC/C ++でかなり錆びているので、これが単純な質問であるなら許してください。
いくつかのCプログラムから共通の関数を取り出して、共有ライブラリまたは共有オブジェクトに配置したいと思います。これをperlで行っている場合は、潜水艦をperlモジュールに入れ、必要に応じてそのモジュールを使用します。
例として、私がこの関数を持っているとしましょう:
int giveInteger()
{
return 1034;
}
明らかにこれは実際の例ではありませんが、その機能を共有したい場合、どのように進めますか?
私には2つの選択肢があると確信しています。
- 共有関数をファイルに入れ、コンパイル時にメインプログラムでコンパイルします。共有関数に変更を加えた場合は、メインプログラムを再コンパイルする必要があります。
- 共有関数をファイルに入れ、共有ライブラリとしてコンパイルし(用語が正しければ)、メインプログラムにその共有ライブラリへのリンクを設定します。(コンパイル後に)共有ライブラリに加えた変更は、メインプログラムを再コンパイルせずに、実行時にメインプログラムに統合されます。
私はその考えを正しくしていますか?
もしそうなら、どうすればこれらの方法のいずれか/両方を完了することができますか?私はたくさん検索しましたが、自分のプログラムを他の人の共有ライブラリにリンクする方法についての情報を見つけたようですが、自分の共有関数を作成して自分のプログラムで使用できるようにコンパイルする方法はわかりません。 。
本当にありがとう!
ブライアン
編集:
結論
皆さんの助けに感謝します!他の人が恩恵を受けることができるように、私はこの投稿に(AIX上の動的共有ライブラリーのために)私のために働いているものを追加すると思いました:共有関数をコンパイルします。
xlc -c sharedFunctions.c -o sharedFunctions.o
次に、それを共有オブジェクトにします。
xlc -qmkshrobj -qexpfile=exportlist sharedFunctions.o
xlc -G -o libsharedFunctions.so sharedFunctions.o -bE:exportlist
次に、別のプログラムにリンクします。
xlc -brtl -o mainProgram mainProgram.c -L. -lsharedFunctions
また、別のコメントがこのリンクを見つけるのに役立ちました。これも役立ちました:http: //publib.boulder.ibm.com/infocenter/comphelp/v7v91/topic/com.ibm.vacpp7a.doc/proguide/ref/compile_library.htm
私を助けてくれたすべての人にもう一度感謝します!