使用指向其他.so的链接编译共享库

时间:2012-12-13 09:03:07

标签: c gcc g++ shared-libraries

我想在编译自己的共享库时将现有的共享库(FlashRuntimeExtensions.so)链接到我的C代码。但无论我尝试什么,我总会得到同样的错误;该文件的格式错误。有没有人知道如何解决这个问题?

这是我的编译命令:

$ 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

3 个答案:

答案 0 :(得分:1)

您的命令行尝试使用您的发行版中提供的本机g ++生成x86代码并将其链接到ARM代码。

这不起作用。使用此处提供的Android NDK:http://developer.android.com/tools/sdk/ndk/index.html

  

NDK包含一组交叉工具链(编译器,链接器等),可以在Linux,OS X和Windows(带Cygwin)平台上生成本机ARM二进制文件。

答案 1 :(得分:0)

一般情况下,.so将使用-l链接。

例如,我们使用pthread -lpthread

gcc sample.c -o myoutput -lpthread

但是根据@ chill的陈述,你在命令中所做的只是正确的。

我建议您参考以下链接。

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

答案 2 :(得分:0)

它应该是架构不匹配。我曾经遇到过这个问题,我已经通过在同一个目标平台上构建lib来解决它,这很明显。如果您使用的是Linux或类似操作系统的Unix,您可以通过file命令看到它,如果您使用的是Windows,则可以看到使用Dependency Walker。您需要确保所有库与架构匹配。