链接到android / linux上的libc(x86)libc.so vs libc.so.6

时间:2012-04-15 02:38:22

标签: android x86 libc

我正在尝试为Android设备构建,但我没有真正的SDK / NDK。与通常具有libc.so的Android设备不同,这个设备具有符号链接libc.so.6 - > libc-2.7.so。 如果我用常规的android NDK-x86构建我的共享库(由readelf -d报告)从libc.so导入,这在设备上不存在。

编号是什么,如果我只是说-lc,gcc / ld如何知道链接到libc.so.6?

更具体地说,该设备是一个Android谷歌电视盒(罗技revue),它似乎有点不同于常规的android,我猜它不使用延迟仿生和使用正常的libc,常规pthread和它的似乎更接近普通的Linux。

那么,我可以使用常规的android-x86工具链为具有不同libc的google tv设备生成代码吗?如何知道链接到libc.so.6(所以我可以告诉它链接到哪些库?)。我试图在链接时简单地对这些库进行硬编码,但后来我在运行时遇到了一些问题(缺少符号,因为它使用了不兼容的头文件和库)。

1 个答案:

答案 0 :(得分:0)

  

这个编号是什么

您可以阅读有关外部库版本控制here的信息。

  

如果我只是说-lc,gcc / ld如何知道链接到libc.so.6?

在使用glibc的Linux上,libc.so实际上是一个链接器脚本,包含如下内容:

GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a 
         AS_NEEDED ( /lib/ld-linux-x86-64.so.2 ) )
  

那么,我可以使用常规的android-x86工具链为具有不同libc的google tv设备生成代码吗?

不,你需要一个交叉 - 编译器。交叉编译器是在一个操作系统(这里是常规Linux)上运行的编译器,但创建一个可在其他地方运行的可执行文件(在Google V上)。

您最好的选择是下载适用于GoogleTV的SDK,其中包括此类交叉编译器以及所需的库。