Libraries
為什麼 LD 一直輸出“沒有可用的版本資訊”
在每次載入庫時,我都會收到錯誤消息:
沒有可用的版本資訊
此庫已在另一台 PC (ubuntu 10.04) 上編譯,而不是在執行它的 PC (mandriva 2010.2) 上編譯。
$ ldd /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so: /lib/libz.so.1: no version information available (required by /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so) linux-gate.so.1 => (0xffffe000) libz.so.1 => /lib/libz.so.1 (0xb77a7000) libc.so.6 => /lib/i686/libc.so.6 (0xb7655000) /lib/ld-linux.so.2 (0xb787a000)
編輯:解決方法不起作用。
不,它沒有。這似乎意味著您在編譯程序時連結的 libz 版本是使用與您正在使用的 madriva 系統上的版本不同的工具建構的。mandriva 副本缺少符號版本資訊,該資訊存在於您的程序最初連結的 libz 庫的副本中。這與各自建構環境的差異有關,與 libz 庫本身的版本無關。
我懷疑您將繼續收到該消息,直到您提供使用與二進製文件相同的工具集建構的 libz 副本,即,將符號版本插入庫的工具集。或者使用類似於在您的 mandriva 系統上編譯 libz 時使用的工具建構您的二進製文件,因此二進製文件中不存在符號版本引用。
見: http://harmful.cat-v.org/software/dynamic-linking/versioned-symbols http://www.linux-kongress.org/1997/youngdale.html http://www.usenix.org/出版物/圖書館/會議記錄/als00/2000papers/papers/full_papers/browndavid/browndavid_html/
我不知道有任何工具可以讓您修改在其他系統上編譯的二進製文件以刪除您不想要的符號版本引用,並保留所有其他(如果有)。