我試圖構建一個共享庫,我也得到了以下錯誤:GCC連接錯誤:版本節點沒有找到符號
libavformat.so: version node not found for symbol [email protected]_52
ld: failed to set dynamic section sizes: Bad value
有誰知道這個錯誤是什麼意思?主機是i586的Linux的目標是arm-linux的
編輯:解決,看評論
我試圖構建一個共享庫,我也得到了以下錯誤:GCC連接錯誤:版本節點沒有找到符號
libavformat.so: version node not found for symbol [email protected]_52
ld: failed to set dynamic section sizes: Bad value
有誰知道這個錯誤是什麼意思?主機是i586的Linux的目標是arm-linux的
編輯:解決,看評論
它是由一條內聯彙編指令.symver
引起的。我的解決方案是手動修改生成的config.h以禁用版本節點符號。
退房internal.h線214-223
它拿了別人指出這一點給我,所以我想我還不如把它放在這裏,以便其他人喜歡我能理解ognian的回答是:
這相當於編輯config.h
運行./configure
並使SYMVER
- 相關條目設置爲0,像這樣經過:
#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0
哦,功能was moved in April 2009從libavformat/util.c
到libavcodec/avpacket.c
中的新文件。該comment in internal.h國家明確:
If a function is moved from one library to another, a wrapper must be retained in the original location to preserve binary compatibility.
但它是不可能的,當一個函數庫之間移動時保持二進制兼容性。
請注意,一年多前在Chromium project中報告了此錯誤。
順便說一句,沒有必要手動編輯config.h
:您可以運行./configure --disable-symver
。
實際上,在本版本中使用的FFmpeg版本中(r25864從2010年12月開始),'--disable-symver'選項不存在,所以手動編輯是必需的。不過,我很高興聽到關於配置選項的消息!當我們切換到更新的FFmpeg或Libav時,我會使用它。 – Nathan 2011-12-06 21:52:14
請張貼的gcc你使用兩種編譯和鏈接的參數。 – 2010-06-28 14:44:42
我擺脫了錯誤 - 它是特定於庫,由內置Assey.symver指令 – ognian 2010-06-28 14:54:15
引起的,您可以在此處發佈解決方案作爲回答 – 2010-06-28 14:55:18