共有オプションと-fPIC - :GCCは、ダイナミックリンクライブラリ(.soのファイル)を構築します

Linuxのダイナミックリンクライブラリ(共有オブジェクトファイルは、共有オブジェクトファイル)ファイルのサフィックス.soプログラムが実行されるよう、(リンク)にロードすることができ、特別な目的のファイル(オブジェクトファイル)で、入って来ました。ダイナミックリンクライブラリを使用する利点は次のとおりです。同時に、小さなモジュラー・更新が容易なプログラムの実行可能ファイル、メモリ効率をより効率的に使用。

GCCは、ダイナミック・リンク・ライブラリを構築します

あなたがダイナミックリンクライブラリを作成する場合は、GCCの使用できる-sharedオプションを。入力ファイルは、ソースファイル、ターゲットファイルまたはアセンブリファイルを指定できます。

また、組み合わせている-fPICオプションを。コンパイルステージに印加される-fPICオプションは、位置独立コード(位置独立コード)を生成するコンパイラを伝える、その結果、生成されたコードには絶対アドレス、相対アドレスのすべての使用されないので、コードがローダにロードすることができますメモリ内の任意の場所は、あなたが実行を修正することができます。これは、共有ライブラリで必要とされる共有ライブラリをロードされている、メモリ内の位置は固定されていません。

たとえば、ソースファイルからダイナミックリンクライブラリを生成します。

$ gccの-fPIC -shared -o func.c libfunc.so

 オブジェクトファイルからダイナミックリンクライブラリをビルドします。

$のgcc -o -fPIC -c func.c func.o 
$のgcc -shared -o func.o libfunc.so

 コンパイル段階に作用する-fPICオプションは、オブジェクト・ファイルを生成する際に、位置に依存しないコードを生成するには、このオプションを使用する必要があります。

実行可能ファイルにリンクされているGCCダイナミックリンクライブラリ

あなたが実行可能ファイルにダイナミック・リンク・ライブラリをリンクする場合は、ソースファイル、オブジェクトファイルの特定と一般的な方法として、コマンドライン上でダイナミックリンクライブラリの名前をリストする必要があります。次の例を考えてみます。

$ gccのmain.cのlibfunc.so -o app.out

 ときapp.out実行、ダイナミックリンクライブラリのロードlibfunc.so、libfunc.soとapp.out main.cの中に一緒にコンパイル。

もちろん、我々は、プログラムが実行時にダイナミックリンクライブラリで見つけることができることを確認する必要があります。あなたは、標準のディレクトリなど/ usr / libにライブラリをリンク、またはそのようなLIBRARY_PATHなど適切な環境変数を設定することができます。異なるシステムは、リンクライブラリをロードするためのさまざまな方法があります。

 

おすすめ

転載: www.cnblogs.com/liuzhenbo/p/11030946.html