robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
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: