由于不兼容的静态库,C ++项目无法构建

时间:2013-09-03 09:15:42

标签: makefile g++ ubuntu-12.04

我正在尝试在64位Ubuntu 12.04上构建一个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”,但已经有了它的最新版本。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

链接器正在尝试链接64位版本的libcrypto.a,因为它无法找到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

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

答案 1 :(得分:0)

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

我安装了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以依赖于相应的命令参数。

项目构建!