0

我正在尝试为 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 谷歌电视盒(Logitech revue),它似乎与普通的 android 有点不同,我猜它不使用延迟仿生并且使用普通的 libc,普通的 pthread,它似乎是更接近普通的linux。

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

4

1 回答 1

0

那个编号是关于什么的

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

如果我简单地说 -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 的谷歌电视设备生成代码吗?

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

最好的办法是下载适用于 GoogleTV 的 SDK,其中包括这样的交叉编译器以及所需的库。

于 2012-04-18T04:31:47.587 回答