【问题标题】:C++ project fails to build due to incompatible static library由于不兼容的静态库,C++ 项目无法构建
【发布时间】:2013-09-03 09:15:42
【问题描述】:

我正在尝试在 Ubuntu 12.04 64 位上构建一个 c++ 项目。 该项目是32位的。 在终端输出我收到这样的行:

ibcrypto.a(bio_b64.o)' 与 i386 输出不兼容

/usr/bin/ld: i386:x86-64 架构的输入文件`/usr/lib/x86_64-linux- gnu/libcrypto.a(bio_asn1.o)' 与 i386 输出不兼容

collect2: ld 返回 1 个退出状态

make[2]: * [linux/release_32/cesmagent] 错误 1

我以为它与 libssl0.9.8 有关,但我执行了“sudo apt-get install libssl0.9.8:i386”,但已经有了它的最新版本。

有谁能帮帮我吗?

【问题讨论】:

  • locate libcrypto.a 是否说出了您的期望?
  • 它返回与错误消息中相同的路径

标签: makefile g++ ubuntu-12.04


【解决方案1】:

链接器正在尝试链接 libcrypto.a 的 64 位版本,因为它找不到 32 位版本。

你说你有这个:

$ locate libcrypto.a
/usr/lib/x86_64-linux-gnu/libcrypto.a

然而,你需要这个:

$ locate libcrypto.a
/usr/lib/i386-linux-gnu/libcrypto.a

(我以为你可以同时拥有两者,但事实证明,在 12.04 上,由于包冲突,不可能同时拥有两者。)

你可以像这样安装 i386 库:

sudo apt-get install libssl-dev:i386

基本上,您可能正确安装了运行时库,但您没有开发者库。

【讨论】:

  • 谢谢,这将有助于构建 32 位项目。但碰巧我也需要 64 位版本的 libssl。不幸的是,您对包冲突的看法是正确的,如下所述:bugs.debian.org/cgi-bin/bugreport.cgi?bug=689093
  • 我建议 LXC 创建一个 32 位 12.04,这样您就可以将它们分开。
【解决方案2】:

解决我的问题的解决方法:

我安装的是 32 位版本库

sudo apt-get install libssl-dev:i386

64 位库已被删除。 在 /usr/lib/i386-linux-gnu 目录中,我找到了 32 位版本的 libcrypto.a 并将其放入 /usr/lib32

然后我安装了 64 位库

sudo apt-get install libssl-dev

在目录 /usr/lib/x86_64-linux-gnu 中找到了 64 位版本的 libcrypto.a 并将其放入 /usr/lib64

在项目的 Makefile 中,我将路径 /usr/lib32/libcrypto.a 和 /usr/lib64/libcrypto.a 调整为依赖于相应的命令参数。

项目构建!

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2021-09-13
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2020-12-13
    • 2021-10-04
    • 2022-07-30
    相关资源
    最近更新 更多