2011-12-19 24 views
1

我鏈接了14個庫,並使用我的應用程序庫中存在的API。但是當我運行我的應用程序時,我正在進入運行時錯誤,說 「無法解析/lib/libxyz.so中的符號x」最多可以將多少個共享庫鏈接到C和Linux中的應用程序?

有什麼想法嗎?

+0

也許你的某些庫需要另一個你沒有鏈接的庫?如果您確實給出了確切的運行時錯誤,我們可以提供更多幫助 – 2011-12-19 10:17:05

回答

3

如果有固定的限制,它是方式 16上方例如:

$ ldd okteta | wc -l 
66 

和應用程序的工作就好了。

您的問題很可能是您針對該庫的不同版本構建了可執行文件,而不是它運行時鏈接到的那個版本,並且一些符號已被更改(或刪除)。

嘗試重建應用程序,或者迫使它鏈接到你想要的版本(可能通過使用LD_LIBRARY_PATH

3

我有一個程序manydl.cmy web page(Linux)的產生一些「隨機」 C代碼轉換成「臨時」 *.c文件,將其編譯爲*.so共享庫,然後dlopen s表示*.so,並重復了很多次。我能使其產生和dlopen約十萬*.so文件。

你可以閱讀評論,並嘗試它(在一個新的目錄,因爲它生成許多文件*.c*.so)。

從本質上講,在Linux上可以像許多共享庫一樣dlopen。唯一的限制是進程地址空間(以及其他內存資源),並且在數以千計的數千個共享庫之前,您將無法訪問它們。

而且作爲Mat回答,有一些程序與許多動態庫鏈接英寸我的每日谷歌Chrome瀏覽器加載73共享庫。

所以總之,別擔心。 (可能發生在大量的大型圖書館中,特別是在C++中,由於重新定位&動態鏈接,您可能會獲得相當大的啓動時間,但不要一開始就煩惱)。

相關問題