討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 網路投保旅行平安險 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
請問如何在 linux 下建立一個 .so 檔
更改我的閱讀文章字型大小
作者 : kaija(路人乙) PHP優秀好手貼文超過200則
[ 貼文 207 | 人氣 8609 | 評價 1040 | 評價/貼文 5.02 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/5 下午 11:20:16
我在 windows 下撰寫了一個 .dll 的檔案(沒有用到 windows 特殊的 api or 函式庫)
我想把同一份 source code 直接拿到 linux 下做 compile 成 linux 下的函式庫
請問該怎麼弄呀...
有什麼需要特別注意的地方嗎
另外請問一下 linux 下面能否做靜態連結呢?
作者 : s8854086____(terenceliu)
[ 貼文 61 | 人氣 4580 | 評價 300 | 評價/貼文 4.92 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/7 下午 01:22:18
1 . 可以做靜態連結
2 . 如果要做shared library,使用ld
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/8 下午 02:04:18
static libaray (執行檔會將此library一並連結)
ar -r libmyLib.a file1.o file2.o .... <---- 產生library
ld -o TimTst -library=libmyLib.a TimTst.o <----- 產生執行檔

Dynamic Library (執行時才載入記憶體)
gcc -shared -o file.so file.c
/? how to create a execute file? /
作者 : kaija(路人乙) PHP優秀好手貼文超過200則
[ 貼文 207 | 人氣 8609 | 評價 1040 | 評價/貼文 5.02 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/9 上午 12:22:33
static libaray (執行檔會將此library一並連結)
ar -r libmyLib.a file1.o file2.o .... <---- 產生library
ld -o TimTst -library=libmyLib.a TimTst.o <----- 產生執行檔

原來常常在 linux 下看到的 .a 檔就是靜態函式庫呀(好像 linux 下面什麼樣的副檔名都行得通 :p)

不過想再請教一下
因為我想 windows 和 linux 使用一份相同的 source code
以先前提到的動態函式庫為例
在 windows 下要 export function 的話就我目前知道的有兩種方法(不知道還有沒有再多 :p)
1.用 __declspec(dllexport) 的方式來 export function
2.將 export function 宣告在 .def 的檔案堶

__declspec(dllexport)/__declspec(dllimport) 這應該是 windows 的產物吧 :P
想請教一下那在 linux 下該如何去 export / import function 呢?

如果是靜態函式庫的話
應該跟 windows 的做法大同小異
撰寫一個 .c 和一個 .h 的檔案
然後 compile 成 .lib(.a)
再用前輩指示的方式把執行檔跟 library 連結起來
不知道這樣子的說法有沒有錯呢 @@?
作者 : s8854086____(terenceliu)
[ 貼文 61 | 人氣 4580 | 評價 300 | 評價/貼文 4.92 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/16 上午 12:25:14
static libaray (執行檔會將此library一並連結)
ar -r libmyLib.a file1.o file2.o .... <---- 產生library
ld -o TimTst -library=libmyLib.a TimTst.o <----- 產生執行檔

原來常常在 linux 下看到的 .a 檔就是靜態函式庫呀(好像 linux 下面什麼樣的副檔名都行得通 :p)

不過想再請教一下
因為我想 windows 和 linux 使用一份相同的 source code
以先前提到的動態函式庫為例
在 windows 下要 export function 的話就我目前知道的有兩種方法(不知道還有沒有再多 :p)
1.用 __declspec(dllexport) 的方式來 export function
2.將 export function 宣告在 .def 的檔案堶

__declspec(dllexport)/__declspec(dllimport) 這應該是 windows 的產物吧 :P
想請教一下那在 linux 下該如何去 export / import function 呢?
<<< 這種方法不需要ㄅ,你應該試著使用dlopen, dlsym()...

如果是靜態函式庫的話
應該跟 windows 的做法大同小異
撰寫一個 .c 和一個 .h 的檔案
然後 compile 成 .lib(.a)
再用前輩指示的方式把執行檔跟 library 連結起來
不知道這樣子的說法有沒有錯呢 @@?
<<< 這樣子沒錯
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/16 下午 12:50:02
在Linux下呼叫 share library 的function 好像沒有特別的規則
example
test.c

void aaa () { printf("aaa"); }
gcc -share -o libtest.so

main.c
int main() {
aaa();
}

gcc main.c -ltest -L. -o main
執行時要將 LD_LIBRARY_PATH 設定為目前的目錄
export LD_LIBRARY_PATH=.

再者可以用 objdump -x 觀察 main 是否 aaa 被link 到 main
可以發現 aaa 的function 是 undefined 的狀況
表示 aaa 的確是執行時才載入的
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/16 下午 12:50:09
在Linux下呼叫 share library 的function 好像沒有特別的規則
example
test.c

void aaa () { printf("aaa"); }
gcc -share -o libtest.so

main.c
int main() {
aaa();
}

gcc main.c -ltest -L. -o main
執行時要將 LD_LIBRARY_PATH 設定為目前的目錄
export LD_LIBRARY_PATH=.

再者可以用 objdump -x 觀察 main 是否 aaa 被link 到 main
可以發現 aaa 的function 是 undefined 的狀況
表示 aaa 的確是執行時才載入的
 板主 : maple-leaf
 > UNIX - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - UNIX - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
UNIX
1 Anderson 1130 
2 old cat 450 
3 maple-leaf 420 
4 MooCow 310 
5 又改暱稱 290 
6 青衫 200 
7 sazabi 200 
8 member one 200 
9 愛睏魚 190 
10 pail 160 
UNIX
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625