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 (将#修改为@)