c - 如何链接在不同系统架构上编译的共享库?
问题描述
我尝试将一个为 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。
解决方案
如何链接在不同系统架构上编译的共享库?
这是不可能的。
您应该在 64 位 Ubuntu 18.04 机器上交叉编译您的库(首选解决方案)或在您的 POS 设备上安装本机编译器。
如果您的 POS 正在运行一些 MIPS 硬件,请考虑使用类似的软件包gcc-multilib-mips-linux-gnu
如果您的 POS 正在运行一些 ARM 硬件,请考虑在您的 Linux 桌面上使用一些 ARM 模拟器(如Qemu )。
或者,下载GCC 10的源代码,并将其编译为交叉编译器。
另请参阅Bismon静态源代码分析器的源代码。它(内部)有一些交叉编译的例子。
我建议将两者都传递-Wall -Wextra
给您的gcc
[cross-] 编译命令。
推荐阅读
- r - 如何在完全删除某些实例的同时删除重复的行(例如 dplyr::distinct())(基于特定列中的相似性)?
- python - 将激活函数组合在一起 - PyTorch
- node.js - nodejs中的Bluesnap支付网关
- r - 在 mutate 和 ifelse 中循环变量名称
- node.js - 重新启动节点应用程序后,用户从 chrome 浏览器中注销
- winforms - .Net 6 Preview 6 - 由于未处理的异常而终止进程 - DivideByZeroException
- angular - 如何在角度 mat-calendar 中突出显示所选日期(设置其背景颜色)
- css - 如何更改 Ag Grid 边框颜色?
- r - 基于布尔值重新调整 ID 列表
- c# - 将 azure 函数超时设置为 1 天