C++ 動的ライブラリの生成

序章

コンセプト

Linux システムと Windows システムには、静的ライブラリと動的ライブラリがあります。
静的ライブラリは、リンク段階で特定のプログラム命令と一緒にリンクされ、全体としてパッケージ化されます。
動的ライブラリは、プログラムの実行中にメモリに動的にロードされます。リンク時にパッケージ化されません。

命名規則

Linux
静的ライブラリ: libxxx.a
動的ライブラリ: libxxx.so
Linux での命名には、接頭辞と拡張子の 2 つの部分があることに注意してください。ライブラリを使用する場合は、真ん中の xxx を名前として使用してください。

Windows
静的ライブラリ: xxx.lib
動的ライブラリ: xxx.dll

動的ライブラリの作成

最初のステップ -c で .o ファイルを取得し、-fpic で位置に依存しないコードを取得します (追加する必要があります)
g++ -c -fpic a.cpp b.cpp
2 番目のステップでは、動的ライブラリーを取得します (ライブラリー名は calc で、ライブラリの完全なファイル名は libcalc.so です)
g++ -shared ao bo -o libcalc.so

動的ライブラリの使用

ldd main は、メイン プログラムが依存している動的ライブラリをチェックします。
コンパイル段階では、動的ライブラリを指定する必要があります。g
++ main.cpp -l test は
、この時点での実行時に動的ライブラリを見つけることができません。環境を構成する必要があります。変数 LD_LIBRARY-PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx/ lib

動的ライブラリの原理

システムが実行可能コードをロードするとき、依存するライブラリの名前を知ることができますが、絶対パスも知る必要があります。このとき、ダイナミックローダは絶対パスを取得する必要がありますが、elf形式の実行プログラムの場合は、一般的にld-linux.soでelfファイルのDT_RPATHセクションを検索→環境変数LD_LIBRARY-PATH→ > /etc /ld.so.cache ファイル一覧 -> /lib/ /usr/lib ディレクトリ。
ライブラリ ファイルを見つけてメモリにロードする

おすすめ

転載: blog.csdn.net/artistkeepmonkey/article/details/125402531