【发布时间】:2012-04-11 15:00:58
【问题描述】:
我正在使用 Linux 2.6.35 的 ARM 系统上运行预链接。我正在使用 Glibc 2.12.2。我想预先链接我的库和应用程序可执行文件。但是,我似乎无法链接直接依赖 glibc 的任何内容。当 prelink 尝试在 /lib 上运行时,它会出错:
Could not write /lib/libc-2.12.2.so: Layout error: section size too small for data
有没有办法让我解决这个问题,或者说服 prelink 预先链接除 /lib 中的所有内容之外的所有内容?我知道/etc/prelink.conf 中的黑名单功能,但是预链接会出错,因为它找不到位于该目录中的依赖项。
编辑:
这是我的 prelink.conf
~ # cat /etc/prelink.conf -h /usr/local/Qt-4.7.4/lib -h /usr/lib -h /lib -h /usr/local/dbus/lib -h /usr/local/sqlite/lib -h /usr/local/ncurses/lib -h /usr/local/expat/lib -h /usr/local/ssl/lib我在飞思卡尔的 i.MX51 平台上。它是 ARM Cortex-8。由于我已经使用我们的开发工具包附带的 GCC/G++ 版本编译了所有内容,因此我假设 ELF 二进制文件是 32 位的。
编辑:
我将 -h 标志更改为 -l 并将系统库移动到列表的前面。我仍然遇到同样的错误。
我在设备上运行预链接,而不是在我的交叉构建机器上。
LD_LIBRARY_PATH 包含 /lib 和 /usr/lib
尝试将预链接运行为: 预链接 -a 预链接-amR
两种方式都得到了相同的结果。
我正在运行 gcc 4.4.6 交叉编译器。 我正在运行 ld 1.12.1 ld。
【问题讨论】:
-
虽然从源代码构建软件是这里的主题,但您更有可能在Stack Overflow 上找到专家,尤其是在您构建自己的程序时。所以我将这个问题标记为迁移(请勿转发)。
-
好的,没问题。由于这个问题实际上并不涉及编写任何代码,因此我认为 SO mods 会希望将其重新定位到这里。我想我在那里有更好的机会,但我想按规则比赛。感谢您的帮助。
标签: linux arm dynamic-linking elf prelink