2016-08-28 79 views
-1

在linux(kylin)中,我創建了一個鏈接到一些.so的進程(pro)。在一些機器上,它工作得很好。但它不能在一臺機器上運行。我用ldd檢查進程, ldd pro 它鏈接到很多多餘的.so。多餘的.so是由其他程序員編寫的。爲什麼鏈接到冗餘動態庫

我設置了系統變量LD_LIBRARY_PATH,確保它只包含包含所需的路徑。然後編譯無法通過。(我也嘗試在其他機器上,它編譯好吧。)

我真的很困惑,爲什麼我的代碼與其他程序員的代碼混合。

我是第一次提問,感謝大家誰查看問題。

+1

你是指「其他程序員的代碼」是什麼意思?你使用的圖書館是你自己寫的嗎?圖書館依賴的圖書館如何?等等?你自己寫了Linux內核和用戶空間嗎?您運行的代碼量是您系統在任何特定時刻運行的所有代碼百分比的一小部分。 –

+0

「其他程序員的代碼」意味着它們不是系統代碼,我的程序所依賴的一些動態庫是由我編寫的,有些是開放的動態庫。 – user6767180

回答

0

今天,我解決了這個問題。

首先,我寫了一個「helloworld」程序,它仍然鏈接到其他動態庫。如「xxx.so找不到,需要用/usr/lib64/crti.o」

然後,我檢查'crti.o'文件,它真的被其他程序員修改過。它連接瞭如此多的動態庫。

我用其他機器替換這個文件後,一切正常。