2012-12-13 208 views
1

我想在編譯我自己的共享庫時將現有的共享庫(FlashRuntimeExtensions.so)鏈接到我的C代碼。但無論我嘗試什麼,我總會得到同樣的錯誤;該文件的格式不正確。有人有關於如何解決這個問題的想法嗎?編譯共享庫鏈接到其他.so

這裏是我的編譯命令:

$ g++ -Wall ane.c FlashRuntimeExtensions.so -o aneObject 
FlashRuntimeExtensions.so: could not read symbols: File in wrong format 
collect2: ld gaf exit-status 1 terug 
+1

'$ file FlashRuntimeExtensions.so'這個命令的輸出是什麼? – SirDarius

+0

http://stackoverflow.com/questions/2527780/c-linker-error-sdl-image-could-not-read-symbols – Jeyaram

+0

@SirDarius:FlashRuntimeExtensions.so:ELF 32位LSB共享對象ARM版本1 (SYSV),動態鏈接,剝離 –

回答

1

您的命令行嘗試生成x86代碼,並使用本機G ++在你的發行版提供鏈接到ARM代碼。

這不起作用。使用Android NDK可在這裏:http://developer.android.com/tools/sdk/ndk/index.html

NDK的包括一組交叉工具鏈(編譯器,連接器等),可以產生在Linux,OS X和Windows原生ARM的二進制文件(使用Cygwin)平臺。

+0

啊我明白了。謝謝! –

0

一般.so將使用-l鏈接。

例如,我們使用pthread -lpthread

gcc sample.c -o myoutput -lpthread

但按@寒冷的說法,你在做什麼的命令僅是正確的。

我建議你參考下面的鏈接。

C++ Linker Error SDL Image - could not read symbols

+1

OP命令行本身非常好。沒有這樣的要求只使用'-l'選項鍊接庫(共享或不共享)。 – chill

+0

@chill,謝謝。我認爲'-l'是強制性的。 – Jeyaram

+0

嗯,當我嘗試它給我的錯誤,即它不能找到指定的庫,即使我用-L選項指定路徑..但​​它可能是一個兼容性問題從鏈接讀取。 –

0

它應該是一個架構不匹配。我曾經遇到過這個問題,我已經通過在相同目標平臺上構建庫來解決這個問題,這很明顯。如果您使用的是Linux或Unix操作系統,您可以通過file命令查看,如果您使用Windows,則可以看到使用Dependency Walker。你需要確保所有的庫都符合架構。