我正在尝试为 ARM 板设置交叉编译软件项目。
该板的 rootfs 中有一些不在主机中的库。因此,为了确保链接器可以链接到它们,我将 rootfs 复制到本地目录并用于-Wl,-rpath-link=${Target}将链接器指向它。
问题:
ld 找不到 glibc。
分析:
使用-Wl,--verbose选项,ld显示:
opened script file {Target}/usr/lib/libpthread.so
opened script file {Target}/usr/lib/libc.so
Run Code Online (Sandbox Code Playgroud)
libc.so:
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /usr/lib/ld-linux-armhf.so.3 ) )
^^^^^ ^^^^^^^^^ ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
libpthread.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /usr/lib/libpthread.so.0 /usr/lib/libpthread_nonshared.a )
^^^^^^^^ ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
因此,当我指向ld从板的 rootfs 复制的库时,它将从那里打开这两个脚本,它们具有硬编码的依赖关系。
但是,如果我不使用-rpath,ld则将使用交叉编译器(/usr/arm-linux-gnueabihf/lib/libpthread.so和/usr/arm-linux-gnueabihf/lib/libc.so)附带的脚本,其中也有硬编码路径,但都是正确的。
题:
这些脚本是干什么用的?
为什么其中一些具有硬编码路径(libc.so,libpthread.so),而有些则没有(libgcc_s.so)?
更新:
我从板上复制的 rootfs 是 Yocto 发行版。
我使用的主机是 Ubuntu14.04 LTS x86-64。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |