轉:如何編譯.so動態庫
問:我源文件爲main.c, x.c, y.c, z.c,頭文件爲x.h,y.h,z.h
如何編譯成.so動態庫?
編譯器用gcc
最好能給出詳細參數解釋,謝謝
答:
# 聲稱動代連接庫,假設名稱爲libtest.so
gcc x.c y.c z.c -fPIC -shared -o libtest.so
# 將main.c和動態連接庫進行連接生成可執行文件
gcc main.c -L. -ltest -o main
# 輸出LD_LIBRARY_PATH環境變量,一邊動態庫裝載器能夠找到需要的動態庫
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
# 測試是否動態連接,如果列出libtest.so,那麼應該是連接正常了
ldd main
# 執行就不用說了吧
-fPIC:表示編譯爲位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。
-L.:表示要連接的庫在當前目錄中
-ltest:編譯器查找動態連接庫時有隱含的命名規則,即在給出的名字前面加上lib,後面加上.so來確定庫的名稱
LD_LIBRARY_PATH:這個環境變量指示動態連接器可以裝載動態庫的路徑。
當然如果有root權限的話,可以修改/etc/ld.so.conf文件,然後調用
/sbin/ldconfig來達到同樣的目的,不過如果沒有root權限,那麼只能採用輸出LD_LIBRARY_PATH的方法了。
轉:如何用GCC編譯生成動態鏈接庫*.SO文件 動態庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
壓縮 解壓縮 關機 重啓 掛載
夢與時光眠
2019-02-23 13:51:55
解決JSP中文亂碼問題
ribmusic
2019-02-23 00:41:31
在Xcode中使用Git進行源碼版本控制
胃搏天
2019-02-23 00:40:04
Extjs 4.2 +Struts2 實現數據動態加載
kefly
2019-02-23 13:20:48
指針與鏈表的理解
計科150809212
2019-02-23 12:53:25
Oracle Listener 動態註冊 與 靜態註冊
xinxinghe
2019-02-23 00:38:51
Oracle Listener 動態註冊 與 靜態註冊
xinxinghe
2019-02-23 00:38:45
JDK動態代理
wutong_2018
2019-02-23 00:36:41
Linux系統搭建簡單 D H C P服務
遇見ZZM
2019-02-24 12:53:29
UPLOOKING_APUE
y674526601
2019-02-23 13:21:00
使用Excel 2007繪製甘特圖
bokezyyx
2019-02-23 00:42:19
Jquery easyUi Droppable(放置)組件
StringLong
2019-02-23 00:41:59
黑盒測試之錯誤推測法
947154267yjn
2019-02-23 00:37:25