首页 > 解决方案 > 如何链接在不同系统架构上编译的共享库?

问题描述

我尝试将一个为 POS 设备(嵌入式 Linux)制作的共享库“libQRCODE.so”与 32 位 arm Linux 但在我的 64 位 Ubuntu 18.04 机器上链接。我收到了这个错误:

gcc main.c -L. -lQRCODE -o output
/usr/bin/ld: skipping incompatible ./libQRCODE.so when searching for -lQRCODE
/usr/bin/ld: cannot find -lQRCODE
collect2: error: ld returned 1 exit status

我怎样才能解决这个问题?

注意:我使用的是最新的 gcc,整个系统是 ANSI C。

标签: cgccembedded-linuxdynamic-linkingansi

解决方案


如何链接在不同系统架构上编译的共享库?

这是不可能的。

您应该在 64 位 Ubuntu 18.04 机器上交叉编译您的库(首选解决方案)或在您的 POS 设备上安装本机编译器。

如果您的 POS 正在运行一些 MIPS 硬件,请考虑使用类似的软件包gcc-multilib-mips-linux-gnu

如果您的 POS 正在运行一些 ARM 硬件,请考虑在您的 Linux 桌面上使用一些 ARM 模拟器(如Qemu )。

或者,下载GCC 10的源代码,并将其编译为交叉编译器。

另请参阅Bismon静态源代码分析器的源代码。它(内部)有一些交叉编译的例子。

我建议将两者都传递-Wall -Wextra给您的gcc[cross-] 编译命令。


推荐阅读