Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linux動的ライブラリ生成の詳細な例

Linux動的ライブラリ生成の詳細な例

  

動的ライブラリは、ディスクとメモリの容量を節約し、プログラムのアップグレードを容易にし、CPUキャッシュヒット率を向上させることなどができます。見てみましょう。

動的ライブラリとは何ですか?

ダイナミックリンクライブラリとも呼ばれるダイナミックライブラリ英語はDLL、ダイナミックリンクライブラリの略語、DLLは複数のプログラムで同時に使用できるコードとデータを含むライブラリです。DLLは実行可能ファイルではありません。動的リンクは、プロセスがその実行可能コードの一部ではない関数を呼び出す方法を提供します。関数の実行可能コードは、コンパイル、リンク、およびそれらを使用するプロセスとは別に格納された1つ以上の関数を含むDLLにあります。 DLLはデータとリソースの共有にも役立ちます。複数のアプリケーションがメモリ内のDLLの単一コピーの内容に同時にアクセスできます。 DLLは、複数のプログラムで同時に使用できるコードとデータのライブラリです。

I.簡単な説明

Linuxでの動的ライブラリファイルの拡張子は' .so'(共有オブジェクト)です。慣例により、すべての動的ライブラリファイル名はlibname.soの形式です(おそらく名前にバージョン番号を追加します)。したがって、スレッド関数ライブラリはlibthread.soと呼ばれます。静的ライブラリのファイル名はlibname.aです。共有アーカイブのファイル名形式はlibname.saです。共有アーカイブは、人々が静的なものから動的なものへと移行するのに役立つ、単なる移行形態です。

Xiaobianは、ネットワーク上での独自の学習経験と優れたコンテンツを統合し、動的ライブラリファイルを生成してリンクする方法を簡単な例で紹介します。

オペレーティングシステム:Ubuntu 14.0.4

GCCバージョン:4.1.3

次に、ライブラリファイルとテストファイルのコード

ライブラリファイルとテストファイルディレクトリー:/home /test /program /

1.ライブラリーのファイル名:myLibSrc.c

コードは以下のとおりです。

/*

filename :myLibSrc.c

* /

#include "stdio.h"

#include' myLibInclude.h'

int

myLibSrcFun(){
printf('があります\\ n');

return 0;

}

2ファイル:main.c

コードは次のとおりです。

/*

ファイル名:main.c

* /

#include Stdio.h "

#include; myLibInclude.h'

int main(intargc、char ** argv){

printf('メイン関数!\\ n'
;

//ロードされた動的ライブラリの関数を呼び出します。

myLibSrcFun();

0を返します。

}

"strong" 3、ヘッダーファイル:myLibInclude.h "/strong"

/*

ファイル名:myLibInclude.h

* /

intmyLibSrcFun(); //関数を宣言します。

3番目に動的ライブラリのコンパイル方法

ライブラリファイルmyLibSrc.cコマンドを次のようにコンパイルします。 :

コードは次のとおりです。

$ gcc myLibSrc.c -shared -o libmyLib.so

または:$ gcc myLibSrc.c -fpic-shared -g -DDEBUG -o libmyLib.so

コンパイルが成功すると、動的ライブラリファイルが/home /test /program /ディレクトリに生成されます。libmyLib.so

追加する点が2つあります。

A. Linuxの場合、通常のユーザーモードを使用することをお勧めしますスーパーユーザー権限が必要な場合は、sudoまたはsu rootを使用してrootユーザーパスワードスイッチを入力できます。個々の学習と使用の観点から、そして多くの操作はrootユーザーを使用する必要があるので、rootユーザーの直下でコンパイルしてください。

B、動的ライブラリをコンパイルするときのパラメータの意味

-fpic:出力オブジェクトモジュールはaddressメソッドで再配置できます。

-shared:対応するソースファイルに対して対応するダイナミックリンクライブラリファイルを生成するように指定します。

4番目に動的ライブラリのテスト方法

テストファイルをコンパイルします。main.c

コードは次のとおりです。

$ gcc– o app main.c /ホーム/test /program /libmyLib.so

正常にコンパイルされた後に実行します。 /app:

コードは次のとおりです。

主な機能!

myLibSrcFun()があります。注:

1.上記のコンパイル済みコマンド$ gcc– o app main.c /home /test /program /libmyLib.soの最後のパラメータ

は、特定の接続ライブラリファイルを指定する絶対パスです。この例のライブラリファイルの絶対パスは、/home /test /program /libmyLib.soです。

もちろん、システムからライブラリファイルのパスにアクセスする場合(通常、システム関数ライブラリは/usr /libディレクトリにあります)。動的ライブラリをリンクする場合は、最初に生成されたライブラリファイルを/usr /libにコピーしてからリンクでコピーできます。

コードは次のとおりです。

$ cp libmyLib.so /usr /lib /libmyLib.so

$ gcc– o app main.c -lmyLib

ここで、リンク方法の簡単な説明:$ gcc– o app main.c -lmyLibについてCコンパイラに渡される、目に見えるコマンドライン引数の– lmyLibの最後のパラメータには、関数ライブラリのフルパスは含まれておらず、関数ライブラリディレクトリ内のファイルのフルネームも含まれていません。実際、コンパイラは、-lmyLibオプションに従って、対応する関数ライブラリ(/usr /libの下)にリンクするように指示されています、つまり、関数ライブラリの名前はlibmyLib.so、つまり< lib'セクションとファイルの拡張子は省略しましたが、前に‘ l’を追加しました。

上記はLinuxでの動的ライブラリ生成の例ですが、これらの例を通して、Linux動的ライブラリがどのように生成されるかについてさらに学ぶことができます。

Copyright © Windowsの知識 All Rights Reserved