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