首页 > 解决方案 > 为什么在 linux 和 arm 之间加载二进制文件的结果如此不同?

问题描述

本质上,我希望我的主程序正确链接到一个库“libA.so”,并且该库中的符号“subFunc”可能来自另一个库(xxx),但这些符号“funcB”不会被主程序。我将它们编译如下: libA.so

int subfunc(int a, int b);
int funcB(int a, int b) {
    return subfunc(a, b);
}

int funcA(int a, int b) {
    return a + b;
}

主文件

#include <stdio.h>
int funcB(int a, int b);
int main()
{
  funcB(1,2);
  printf("hello\n");
  return 0;
}
gcc --shared libA.cc -o libA.so
gcc main.cc libA.so -o main -Wl,--allow-shlib-undefined

./main './main' 可以在linux上正常运行,但是当我交叉编译它们时:

aarch64-linux-gnu-gcc --shared libA.cc -o libA.so
aarch64-linux-gnu-gcc main.cc libA.so -o main -Wl,--allow-shlib-undefined

然后在平台'arm','./main'上运行得到通知:./main:符号查找错误:libA.so:未定义符号:_Z7subfuncii

对我的任何建议,我将不胜感激。

标签: c

解决方案


推荐阅读