如何編譯 .c 檔成為 library

小法前陣子要用 JNI 時問我的問題,因為他所用到的 c 語言程式,會碰到編成 linux 上 .so library 的問題。

cc -c -fpic -I$(java-config -O)/include -I$(java-config -O)/include/linux HelloWorldImp.c -o libhello.o
ld -shared libhello.o -o libhello.so
export LD_LIBRARY_PATH=.

若只有一個檔案,可以直接下 -shared 參數在 cc 中,讓 cc 直接 link 出 .so 檔
-shared 是 dynamic library

cc -shared -fpic -I$(java-config -O)/include -I$(java-config -O)/include/linux HelloWorldImp.c -o libhello.so

也就是說,把最前面 2 行,直接用下面這一行取代

若是要做出 static library
則是產生出 .o 檔後,使用 ar rcs libhello.a libhello.o … 把多個 .o 檔壓在同一個 .a 檔案
建立 static library

參考資料:
1.The Linux GCC Howto
http://www.linux.org.tw/CLDP/OLD/GCC-HOWTO-6.html (中文版)
http://www.faqs.org/docs/Linux-HOWTO/GCC-HOWTO.html (HTML)
http://linux.cis.nctu.edu.tw/LDP/HOWTO/text/GCC-HOWTO (TEXT)

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: