在C編譯器下,我們可以利用-I的旗標告訴編譯器,標頭檔案放在其他子目錄
例如:
$gcc -I/usr/sample/include sample.c
這指示編譯器去/usr/sample/include的目錄下找尋必要的header檔
再來我們想要link我們自己的libarary,
我們可以利用-L跟-l來告訴編譯器函式庫的位置與欲link的函式庫的名稱
例如:
$gcc -o sample sample.c /usr/lib/libm.a
上述的指令是直接跟gcc說述的指令是直接跟gcc說明我要link的函式庫的位置與名稱
$gcc -o sample sample.c -L/usr/lib -lsample
上述的指令是在跟gcc說明-L(放libarary的檔案路徑) -l(欲link的函式庫名稱)
通常同一個函式庫會有動態函式庫和靜態函式庫若是用上述的方式link gcc會先去link動態函式庫
2008年11月13日 星期四
2008年11月12日 星期三
生成動態函式庫與靜態函式的方法in linux
靜態函式庫的生成:
在LINUX底下我們可以利用ar程式(名稱就是因為它會產生archives)來幫我們建立靜態函式庫
方法如下:
$ar crv (函式庫名稱)註1 (obj檔1) (obj檔2) ......
範例:
假設我想把 bill.o fred.o 這兩個obj檔做成一個叫libfoo.a靜態函式庫我可以下這樣的指令
$ar crv libfoo.a bill.o fred.o
再來我們利用gcc這個編譯器來幫我們建立動態函式庫
方法如下:
$gcc -shared -o (函式庫名稱) (source檔1) (source檔2) .....
範例:
假設我想把bill.c fred.c 這兩個source檔做成一個叫libfoo.so動態函式庫我可以下這樣的指令
$gcc -shared -o libfoo.so bill.c fred.c
註1:當我們在取函式庫的名稱時有一定的命名方式,其命名方式如下:
lib(函式庫名稱).a //靜態函式庫
lib(函式庫名稱).so //動態函式庫
參考網站:
http://blog.yam.com/ytha/article/16636287
在LINUX底下我們可以利用ar程式(名稱就是因為它會產生archives)來幫我們建立靜態函式庫
方法如下:
$ar crv (函式庫名稱)註1 (obj檔1) (obj檔2) ......
範例:
假設我想把 bill.o fred.o 這兩個obj檔做成一個叫libfoo.a靜態函式庫我可以下這樣的指令
$ar crv libfoo.a bill.o fred.o
再來我們利用gcc這個編譯器來幫我們建立動態函式庫
方法如下:
$gcc -shared -o (函式庫名稱) (source檔1) (source檔2) .....
範例:
假設我想把bill.c fred.c 這兩個source檔做成一個叫libfoo.so動態函式庫我可以下這樣的指令
$gcc -shared -o libfoo.so bill.c fred.c
註1:當我們在取函式庫的名稱時有一定的命名方式,其命名方式如下:
lib(函式庫名稱).a //靜態函式庫
lib(函式庫名稱).so //動態函式庫
參考網站:
http://blog.yam.com/ytha/article/16636287
訂閱:
文章 (Atom)