介紹一個生成動態鏈接庫*.so的例子: 首先新建1個頭文件test.h:
#include <stdio.h> void first(); void second(); void third();
然後新建3個源文件first.c/second.c/third.c:
first.c:
#include "test.h" void first() { printf("this is first.\n"); }
second.c:
#include "test.h" void second() { printf("this is second.\n"); }
third.c:
#include "test.h" void third() { printf("this is third.\n"); }
然後,生成動態鏈接庫libtest.so: gcc first.c second.c third.c -fPIC -shared -o libtest.so
說明:1、-fPIC意思是代碼位置獨立便於程序共享。2、-shared意思是生成動態鏈接庫
接著新建一個調用動態鏈接庫的源代碼test.c:
#include "test.h" void main(){ first(); second(); third(); }
跟著生成可執行文件: gcc test.c -L. -ltest -o test
說明:-L.表示鏈接庫在當前目錄;-ltest表示根據隱含規則查找到libtest.so的鏈接庫
此時執行./test會得到如下結果:
this is first. this is second. this is third.
如果沒有得到這個結果,而是提示你“./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory ”,那麼就在/etc/ld.so.conf.d目錄下新建一個test.conf配置文件,並在該文件中寫入你的動態鏈接庫的訪問路徑比如/usr/local/demo/lib,具體根據自己的情況而定。建好之後鍵入sudo ldconfig使配置生效。
over.
ps:
對於找不到鏈接庫的情況,還可以通過創建軟鏈接的方式,比如ln -s /your_folder/*so /usr/lib