robot
最新文章(10)
快樂的小成就
Pythonkey 計劃
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (91)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
dependency of shared object
by thinker
2 Columns
關鍵字:
Linux
$Linux$ 兮 shared library, 也就是 shared object 能大大的減少 binary 兮 size. 但是, 有一個疑問是, 如果有一個程式 用著 liba.so, 而 liba.so 又擱用到 libb.so 時, 咱咁有需要佇 link 時, 指定 -lb 以 link libb.so? 這要看產生 liba.so 時, 是昧是有指定 link libb.so. 以下面兮例來看: {{{ /* file: a.c */ extern b(); a() { b(); } }}} {{{ /* file: b.c */ b() { return 1; } }}} {{{ /* file: testso.c */ extern a(); int main(int argc, char *argv[]) { a(); } }}} 下面是昧通耶: {{{ gcc -c a.c gcc -c b.c ld -shared -o libb.so b.o ld -shared -o liba.so a.o gcc -o testso testso.c -la -L./ }}} 加上 "-lb" 之後, 就可以順利成功: {{{ gcc -c a.c gcc -c b.c ld -shared -o libb.so b.o ld -shared -o liba.so a.o gcc -o testso testso.c -la -lb -L./ }}} 在產生 liba.so 時, 指定 "-lb" 也是可以: {{{ gcc -c a.c gcc -c b.c ld -shared -o libb.so b.o ld -shared -o liba.so a.o -lb -L./ gcc -o testso testso.c -la -L./ }}} 上面的 binary 雖可以 link 成功, 但是執行時會找昧著 library. 這是因為咱自己兮 library 並無放佇系統兮 library 目錄, 所以 dynamic link loader 會找無. 只要改成: {{{ gcc -c a.c gcc -c b.c ld -shared -o libb.so b.o ld -shared -o liba.so a.o -lb -L./ gcc -o testso testso.c -la -L./ -Xlinker -rpath=./ }}} 指定 rpath 為目前兮目錄就可以. 所以, 需要指定相關兮 library 呣, 就要看 shared object 建立時, 是毋是有指定相關兮 library.
最後更新時間: 2005-03-02 19:03:56 CST |
引用
查詢:
COMMENTS: