linux在gcc編譯時加上 -shared 參數時,目的是使源碼編譯成動態庫 .so 文件;
而-fPIC的作用是 告知編譯器 生成位置無關代碼(編譯產生的代碼沒有絕對位置,只有相對位置);從而可以在任意地方調用生成的動態庫。
示例:
gcc fun.c -shared - fPIC -o libfun.so
如果代碼沒有錯誤,則可以在當前路徑下生成libfunc.so文件;
此時此動態庫還不能被正確的鏈接上,因為系統尋找鏈接庫的路徑不包含當前路徑;需要將此so文件放到搜尋路徑中,或者添加尋找路徑;
默認查找的路徑中有 /usr/lib 可以使用:
sudo cp libfunc.so /usr/lib/
將動態庫復制到 /usr/lib目錄中。
或 添加搜尋路徑可以在環境變量 LIBRARY_PATH 中添加:
LIBRARY_PATH=$LIBRARY_PATH:.
這樣就添加了[當前路徑]為動態庫的搜尋路徑。( :為路徑分割符 . 為當前路徑 )
注意:修改了LIBRARY_PATH之后必須執行 export LIBRARY_PATH 才能生效,而且只能在當前終端生效。
在其他文件需要調用其中的函數時,編譯時加上 -lfunc。
示例:
gcc main.c -lfun
即可生成鏈接了libfunc.so的可執行文件;