bluesoho 回復于:2004-07-25 10:52:14 |
# 聲稱動代連接庫,假設名稱為libtest.so
gcc x.c y.c z.c -fPIC -shared -o libtest.so # 將main.c和動態連接庫進行連接生成可執行文件 gcc main.c -L. -ltest -o main # 輸出LD_LIBRARY_PATH環境變量,一邊動態庫裝載器能夠找到需要的動態庫 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. # 測試是否動態連接,如果列出libtest.so,那么應該是連接正常了 ldd main # 執行就不用說了吧 -------------------------------------------------- 建議創建一個Makefile來作這些事情。 |
bluesoho 回復于:2004-07-25 11:00:29 |
-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。
-L.:表示要連接的庫在當前目錄中 -ltest:編譯器查找動態連接庫時有隱含的命名規則,即在給出的名字前面加上lib,后面加上.so來確定庫的名稱 LD_LIBRARY_PATH:這個環境變量指示動態連接器可以裝載動態庫的路徑。 當然如果有root權限的話,可以修改/etc/ld.so.conf文件,然后調用 /sbin/ldconfig來達到同樣的目的,不過如果沒有root權限,那么只能采用輸出LD_LIBRARY_PATH的方法了。 |
閑聊101306 回復于:2004-07-25 11:01:59 |
十分感謝 |
eagerly1 回復于:2004-07-25 20:39:00 |
收藏了 |
jsean 回復于:2004-07-27 13:05:07 |
收藏! |
FH 回復于:2004-07-27 13:19:14 |
什么呀,就收藏?對么?環境是什么?編譯器是什么?連接器又是什么? |
kurapikar 回復于:2004-07-27 13:21:42 |
想問個問題 連接器是指? |
jsean 回復于:2004-07-28 12:26:03 |
[quote:3b1e7e4aad="FH"]什么呀,就收藏?對么?環境是什么?編譯器是什么?連接器又是什么?[/quote:3b1e7e4aad]
FH給大家一個更有說服力和更有收藏價值的相關說明吧,先謝了,呵呵 |
FH 回復于:2004-07-28 13:14:11 |
最有價值的就是在你自己的環境下:
man cc/gcc/... man makefile man make 因為上文所說的各個參數,對不同的環境可能是完全不一樣的。 順便說一下,連接器是ld。 |
roking 回復于:2004-07-28 15:29:02 |
好帖子,支持:)
但是我看好多書上都寫著要在/etc/ld.so.conf 里要配置一下,不知道是什么意思,因為我在solaris8上沒有找到這個文件,能解釋一下嗎?? 謝謝:) |
hzluly 回復于:2004-07-28 23:26:30 |
bluesoho,不錯 |
bluesoho 回復于:2004-07-29 00:47:05 |
[quote:9801265724="hzluly"]bluesoho,不錯[/quote:9801265724]
謝謝! 我也是beginner, 各位高位清多指教 |
FH 回復于:2004-07-29 10:30:54 |
[quote:1428186b54="jsean"]
FH給大家一個更有說服力和更有收藏價值的相關說明吧,先謝了,呵呵[/quote:1428186b54] 其實,花點功夫在精華區里找一下,就有各種環境的選項說明的。 |