0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Linux]動的ライブラリと実行ファイルの作成

Last updated at Posted at 2024-06-01

ここでは動的ライブラリとそれを利用する実行ファイルの作り方について説明します。
以下の手順に従ってサンプルの作成例が以下の記事になります。
https://qiita.com/miyo4/items/1211b88083f7af261855

動的ライブラリの作成

コンパイル

gcc -fPIC -c <ソース(.c)>
or
gcc -fPIC -c <ソース(.c)> -I <ヘッダファイルのディレクトリパス>

-fPICの指定は必須
ソースファイル名.oのファイル名でオブジェクトファイルが生成される
/usr/include以外にあるヘッダを参照する場合は-Iでディレクトリを指定する

動的ライブラリ作成(リンク)

gcc -shared -o <ライブラリ名(lib**.so)> <オブジェクトファイル(.o)>

・オブジェクトファイル(.o) はコンパイルにより生成される
・動的ライブラリのファイル名はlib<ライブラリ名>.soと決まっている
・他に静的ライブラリのファイル名はlib<ライブラリ名>.aなどがあるがここでは使わない

動的ライブラリを利用する実行ファイルの作成

コンパイル

gcc -c <ソース(.c)>
or
gcc -c <ソース(.c)> -I <ヘッダファイルのディレクトリパス>

/usr/include以外にあるヘッダを参照する場合は-Iでディレクトリを指定する

実行ファイル作成(リンク)

gcc -o <実行ファイル名> <オブジェクトファイル名(.o)>
or
gcc -o <実行ファイル名> <オブジェクトファイル名(.o)> -l <動的ライブラリ名の**部分(lib**.so)>
or
gcc -o <実行ファイル名> <オブジェクトファイル名(.o)> -L <動的ライブラリのディレクトリパス> -l <動的ライブラリ名の**部分(lib**.so)>

・実行ファイルが動的ライブラリ(lib**.so)を参照する場合は-lオプションでライブラリ名を指定する。ライブラリ名を指定はlib<ライブラリ名>.so<ライブラリ名>の部分なので間違えないように。
・動的ライブラリが/lib64フォルダ以外に存在する場合は-Lオプションでディレクトリを指定したうえで、-lオプションでライブラリ名を指定する

動的ライブラリを使った実行ファイルの実行

共有ライブラリの検索パスを追加する必要がある場合

動的ライブラリが標準の検索パス上に存在しない場合は、実行時にエラーが出力されます。
その場合は、以下2種類の方法で検索パスを追加することができます。

環境変数LD_LIBRARY_PATHで指定する方法

動的ライブラリを検索するパスを追加したい場合は環境変数LD_LIBRARY_PATHにパスを追加するのがよし。例えば、カレントディレクトリを検索パスに加えたい場合は以下を実行する。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<検索パス>

例えば、カレントディレクトリを追加したい場合は以下となる。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

リンク時に検索パスを-Wl,-rpath=で指定しておく

実行ファイルを作成する時にリンクオプション-Wl,-rpath=に検索パスを指定しておくこともできます。この場合は、LD_LIBRARY_PATHの編集は不要です。

gcc -o <実行ファイル名> <オブジェクトファイル名(.o)> -Wl,-rpath=<検索パス>

例えば、カレントディレクトリを追加したい場合は以下となる。

gcc -o <実行ファイル名> <オブジェクトファイル名(.o)> -Wl,-rpath=.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?