ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

共有ライブラリを参照した実行ファイル作成と実行

projectA/
  ├ include/foo.h
  └ lib/libfoo.so

上記のようなヘッダと共有ライブラリを使い自作のソースをコンパイルしようとします。

//main.c
#include <foo.h>
...

Linuxの場合往々にして、
ヘッダは/usr/local/includeまたは/usr/includeに置かれます。
ライブラリは/usr/libまたは/usr/local/libに置かれます。

/usr/local/に上記のprojectAを配置し、main.cをコンパイルしようとすると以下のようなコードになります。

g++ main.c main -L /usr/local/projectA/lib -I /usr/local/projectA/include -lfoo

作成されたmainを実行します。

$ ./main

するとエラーになります。

$ ldd main

上記のコマンドで参照している共有ライブラリを表示してくれるのですが、
foo.so がNot Foundとなります。

コンパイラに対して、ライブラリの場所を教えてあげています。
なので実行ファイルも知っているかと思ったら、なんと知らないようです。

動的リンカによる実行時の結合関係を設定する

/etc/ld.so.conf.d/○○○.conf(任意作成)に下記を追加

/usr/local/projectA/lib

再実行

$ sudo ldconfig
$ ./main