【问题标题】:How to link a shared library compiled on different system architecture?如何链接在不同系统架构上编译的共享库?
【发布时间】:2021-05-20 09:53:37
【问题描述】:

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

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。

【问题讨论】:

    标签: c gcc embedded-linux dynamic-linking ansi


    【解决方案1】:

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

    这是不可能的。

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

    如果您的 POS 运行一些 MIPS 硬件,请考虑使用像 gcc-multilib-mips-linux-gnu 这样的软件包

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

    或者,下载GCC 10的源代码,编译成交叉编译器。

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

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

    【讨论】:

    • 无法交叉编译库因为我无权访问源代码或目标代码(金融科技安全软件)。我只有这个库,我需要让它工作。实际上,该库在 POS 上运行良好,但更新软件需要 7 分钟,这就是我尝试在我的机器上运行它的原因。
    • 然后与您的客户/老板/经理讨论这个问题。
    • 一种解决方案是从您的目标系统创建一个 docker 容器并在那里编译。我们就是这样做的。
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多