c文件filea.c:
#includevoid fun1() { printf("i am from filea fun1 \n"); }
#includevoid fun2() { printf("i am from fileb fun2 \n"); }
void fun1(); void fun2(); int main(int argc,char *argv[]) { fun1(); fun2(); return 0; }
1.將filea.c fileb.c編譯成so庫供testso.c調用,命令如下:
gcc -Wall -fpic -shared filea.c fileb.c -o first.so
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz4yLrHg0ut0ZXN0c28uY7KiwbS907myz+2/4mZpcnN0LnNvPC9zdHJvbmc+PC9wPgo8cD5nY2MgLVdhbGwgdGVzdHNvLmMgZmlyc3Quc28gLW8gdGVzdHNvPGJyPgo8L3A+CjxwPjxicj4KPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141125/20141125085609297.png" alt="\">
3.執行。
此時,執行./testso 將會拋出./testso: error while loading shared libraries: first.so.0:cannot open shared object file: No such file or directory
程序 testso已經完成,但要運行它必須讓其能定位到共享庫 first.so,因為庫中的函數要在程序運行時被加載。 需要注意的是,當前工作目錄可能不在共享庫的查找路徑中,因此需要使用如下的命令行設定環境變量LD_LIBRARY_PATH:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
再次執行./testso,輸出正確結果: