NCTU_CS_EDA 板


LINE

如果有想要建立自己的 share library 的話可以參考一下 作者 float (鵬羽) 站內 P-float 標題 建立 動態、靜態函式庫 時間 2011/11/10 Thu 16:43:27 reference:http://www.vr.ncue.edu.tw/esa/EmbeddedSystemProgramming2010/ch09.htm reference裡面比較詳細 簡介: 函式庫(library)是一些事先編譯過的函數集合 Linux中標準的系統函數庫通常放在目錄/lib和/usr/lib,函式庫的名稱都是以lib開頭, 再加上自定的名稱,附屬檔名為.a或.so。名稱加上.a的函式庫代表這是一個靜態的函式 庫,名稱加上.so的函式庫代表這是一個動態的函式庫。 靜態函式庫 libXXXX.a 動態函式庫 libXXXX.so 特性 靜態函式庫:執行時不需要函式庫,但檔案較大 動態函式庫:執行檔小 更改程式可以不用重新編譯其他程式 甚至可以在執行時修改 動態函式庫命名 real name: libXXXX.so.版本代號1.版本代號2.... linker name: 編譯器所搜尋的程式庫名稱, 傳統上就是real name刪去所有版本號碼後的名稱, 例如「libXXXX.so」 使用函式庫 拿數學函式庫舉例我們在使用的時候會下像這樣的指令 gcc main.c -o main -lm -lm 就是告訴linker我們要link m這個函式庫 而m這個函式庫的實際檔案名稱是 libm.a (靜態) 接下來用下面三個檔案來示範製作動態和靜態函式庫 ==========main.c========== #include "my_lib.h" int main() { my_printf("abc"); return 0; } ========================== ==========my_lib.h======== #ifndef __MY_LIB_H__ #define __MY_LIB_H__ #include <stdio.h> int my_printf(const char* str); #endif ========================== ==========my_lib.c======== #include "my_lib.h" int my_printf(const char* str) { return printf(str); } ========================== 以上當案可以先用 gcc main.c my_lib.c -o main 編譯來測試正確性 接下來第一步將要編成函式庫的檔案編譯但不要link gcc -c my_lib.c -c 參數就是編譯但不連結 執行完後會產生 my_lib.o 這時候一樣可以這樣編譯 gcc main.c my_lib.o -o main 如果懶得繼續把檔案編成什麼函式庫是可以這樣用就好XD 靜態函式庫 接下來使用ar指令來產生靜態函式庫 ar -cru libmy_lib.a my_lib.o 其中參數-cru 用來建立或加入目的檔案,c建立靜態函數庫,r告知ar取代已經存在的目 的檔案,u表示取代的目的檔案必須比現存的目的檔案還新。 這樣就可以產出 libmy_lib.a 這個靜態函式庫 接下來就可以這樣使用編譯好的函式庫 gcc main.c -o main -lmy_lib (視情況加上 -L函式庫位置讓編譯器搜尋的到函式庫) 執行 ./main 動態函式庫 第一步也是將要編成函式庫的檔案編譯 gcc -fPIC -c my_lib.c 一樣產生my_lib.o 加上fPIC的用意好像是讓他在記憶體中只有一份可以省空間,這我還要研究一下 不加也是可以完成後面的步驟 在來使用-shared來讓gcc建立動態函式庫 gcc -shared my_lib.o -o libmy_lib.so 就可得到 libmy_lib.so 這個動態函式庫 在來使用方法同上 gcc main.c -o main -lmy_lib (視情況加上 -L函式庫位置讓編譯器搜尋的到函式庫) 這時候執行./main應該會發現類似以下錯誤 ./main: error while loading shared libraries: libmy_lib.so: cannot open shared object file: No such file or directory 這是因為 libmy_lib.so 並不是放在PATH所包含的路徑下, 把它搬過去或是在PATH裡面加入你想要的位置就可以解決這個問題了 以上 請多指教 還有我發現那個網頁好像很多地方打錯字= = ==補充== 剛剛自己在實做的時候想到一個問題,如果目錄下同時有動態和靜態函式庫那要gcc會選 哪個? 答案是先選動態,如果希望使用靜態的函式庫請加上 -static 參數 -- ╔═══╗ ╦ ╔═══╗ ╔═══╗ ╔═╦═╗ ║ ║ ║ ║ ║ ║ ║ ╠══╣ ║ ║ ║ ╠═══╣ ║ ║ ║ ║ ║ ║ ║ ║ ╩ ╩═══╝ ╚═══╝ ╩ ╩ ╩ -- ※ Origin: 成功大學資訊工程學系[醉資心BBS] <goodguy.csie.ncku.edu.tw> ◆ From: 140.116.111.93 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.134.61
1F:推 dnol:實用! 太感謝了! 這篇應該要收 02/10 00:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP