微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

libc.a 意外重定位类型 0x03

如何解决libc.a 意外重定位类型 0x03

我使用预构建的 libc.a,其中有一些副本重定位:

public class Constructor {

private final String a;
private final String b;
private final String c;

public Constructor(String a) {
    this.a = a;
    this.b = getB(a);
    this.c = getC(a,b);
}

public String getB(String a) {
    return a.trim();
}

public String getC(String a,String b) {
    return a + b;
}

public static void main(String[] args) {
    Constructor myConstructor = new Constructor(" Hello ");
    System.out.println(myConstructor.a);
    System.out.println(myConstructor.b);
    System.out.println(myConstructor.c);
    new Constructor(null);
}

我想将一个共享库静态链接到这个静态 libc.a :

0001f554  00010f03 R_ARM_REL32       0001fb00   __memcpy_neon
0001f558  00037803 R_ARM_REL32       00020000   __memcpy_vfp
0002100e  0000f303 R_ARM_REL32       0007aa78   __libc_multiple_thread
0002108e  0000f303 R_ARM_REL32       0007aa78   __libc_multiple_thread
0002110e  0000f303 R_ARM_REL32       0007aa78   __libc_multiple_thread
0003b810  0000f303 R_ARM_REL32       0007aa78   __libc_multiple_thread
0003b98e  0000f303 R_ARM_REL32       0007aa78   __libc_multiple_thread
0002b3a2  00006c03 R_ARM_REL32       00077998   __pointer_chk_guard_lo
00044334  00006c03 R_ARM_REL32       00077998   __pointer_chk_guard_lo

这没有任何警告或错误

但是当我执行一个依赖于这个 libshared 的可执行文件时,我有这个:

arm-linux-gcc -fPIC -shared shared.c ./libc.a -o libshared.so

那么首先,error while loading shared libraries: ./libshared.so: unexpected reloc type 0x03 的真正含义是什么,为什么 gcc 允许我创建这个 libshared 没有任何错误或警告? 应该不可能从具有某些副本重定位的对象创建共享库。

几秒钟,我该如何解决我的问题,我是否必须使用 -fPIC 标志重建 libc.a?有没有其他解决方案可以让我不修改这个 libc.a ?

哪个库实现了这些 R_ARM_REL32 依赖项,为什么 libc.a 不是独立的?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。