我正在尝试为android设备构建,但我没有真正的SDK/NDK。与安装了libc.so的普通安卓设备不同,这个设备有符号链接libc.so.6 --> libc-2.7.so。如果我使用常规的android NDK-x86构建,我的共享库(据readelf -d报道)是从设备上不存在的libc.so导入的。
编号是关于什么的,如果我简单地说-lc,那么gcc/ld是如何知道链接到libc.so.6的?
更具体地说,这款设备是一款android google tv box (罗技版本),看起来和普通的android有点不同,我猜它没有使用迟缓的仿生,而是使用了普通的libc,普通的pthread,它看起来更接近普通的linux。
那么,我可以使用常规的android-x86工具链为具有不同libc的google tv设备生成代码吗?它如何知道改为链接到libc.so.6 (这样我就可以告诉它要链接到哪些库?)。我试图在链接时对这些库进行硬编码,但在运行时遇到了一些问题(缺少符号,因为它使用了不兼容的头和库)。
发布于 2012-04-18 12:31:48
编号是怎么回事?
您可以阅读有关外部库版本控制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的
tv设备生成代码吗?
不,你需要一个交叉编译器。交叉编译器是在一个操作系统(这里是普通的Linux )上运行的编译器,但创建的可执行文件将在其他地方运行(在Google V上)。
最好的办法是下载用于GoogleTV的SDK,其中将包含这样的交叉编译器以及所需的库。
https://stackoverflow.com/questions/10159107
复制相似问题