2
當我讀共享庫時,這些疑惑開始向我提出。如何更改已編譯的二進制文件的lib版本
1. .----------------- -------------------------- 假設我已經編譯如下圖所示,
test : main.o libtest.so.2
gcc main.o -L ../../lib -ltest -o test
libtest.so.2 : version2.c
gcc -Wall -fPIC -c version2.c
gcc -shared -Wl,-soname,libtest.so -o libtest.so.2.0 version2.o
ln -sf libtest.so.2.0 libtest.so
mv libtest.s* ../../lib
main.o : main.c
gcc -c main.c
已經給出-ltest,圖書館應始終成爲libtest.so的軟鏈接。正確嗎? 那麼,如果我爲另一個二進制文件尋找更高版本的libtest,而前者需要它的舊版本呢?我該如何處理。
2 .-------------------------------------------- ----------------------------- 我有幾個庫,我不希望將它們包含在LD_LIBRRAY_PATH中,因爲每個人都必須搜索這個與他們完全相關的文件夾。
答案2我很清楚。 tx 對於我的問題是,如果我以前面展示的方式編譯,因爲我沒有期望升級,後來我去更新。我同意你的回答,如果我重新編譯main,我可以像下面這樣做,對嗎? gcc -shared -Wl,-soname,libtest.so.2 -o libtest.so.2.0 version2.o – adarsh 2013-04-07 19:11:39
符號鏈接「libtest.so」 - >「libtest.so.2.0」僅供開發使用。當你的應用程序鏈接到「libtest.so」鏈接器時,作者依賴性會從「libtest.so.2.0」的soname中獲得。它將是「libtest.so.2」。當你開始你的應用程序加載器將搜索你需要什麼庫,並會發現「libtest.so.2」(符號鏈接或真正的lib),也可以指向任何「libtest.so.2.X」(這是二進制 - 兼容)。當你創建「libtest.so.3.0」時,前者仍然會與「libtest.so.2」鏈接。 – loentar 2013-04-07 19:18:52
有沒有編譯的工作。 – adarsh 2013-04-07 19:20:18