我正在尝试在debian wheezy 64位主机上编译使用openssl的32位二进制文件。
我遵循了我认为是添加i386体系结构并安装libssl1.0.0:i386的推荐方法。
只是一个简单的测试程序无法链接:
#include <openssl/ssl.h>
int main(void)
{
SSL_load_error_strings();
return 0;
}
$ gcc -m32 -lssl -o test -Wall test.c
/usr/bin/ld: cannot find -lssl
collect2: error: ld returned 1 exit status
不带-m32的同一命令也可以正常工作。
我确实有一个32位的libssl:
$ locate libssl | grep i386
/usr/lib/i386-linux-gnu/libssl.so.1.0.0
/usr/lib/i386-linux-gnu/i586/libssl.so.1.0.0
/usr/lib/i386-linux-gnu/i686/cmov/libssl.so.1.0.0
添加--verbose将显示链接器命令:
这似乎表明它正在搜索/usr/lib/i386-linux-gnu/,即libssl.so.1.0.0所在的位置。
根据
file
,所有文件似乎都是有效的:/usr/lib/i386-linux-gnu/libssl.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x56052e2cdbad1207690499400909c6c87209735a, stripped
/usr/lib/i386-linux-gnu/i586/libssl.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x620bde79657c57fe5ef098d3648ccc2ce4bdb232, stripped
/usr/lib/i386-linux-gnu/i686/cmov/libssl.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x89b973943dfc314c56231d48eddad5fe785f6b12, stripped
我想尝试尝试的另一件事是安装libssl-dev:i386,但是尝试安装它想删除64位gcc和g++编译器以及64位libssl-dev,这使我认为这不是正确的选择(并且可能阻止我建立64位二进制文件):
# apt-get install libssl-dev:i386
<..>
The following packages will be REMOVED:
build-essential cpp g++ g++-multilib gcc gcc-multilib libssl-dev lib tool
<..>
我已经尝试过四处搜寻;我发现其他人也有同样的问题,但没有解决方案。
最佳答案
根据askubuntu的说法,debian wheezy libssl-dev package in wheezy is broken / not multi arch compatible。它似乎已在测试(jessie)中修复,也可能在Ubuntu 14.04中修复(可能也是较早的ubuntu修复)。
以下内容至少可以解决链接器错误:
cd /usr/lib/i386-linux-gnu/
ln -s libssl.so.1.0.0 libssl.so
ln -s libcrypto.so.1.0.0 libcrypto.so