系统相关
首页 > 系统相关> > linux-在64位Debian Wheezy多体系结构主机上编译使用ssl的32位二进制文​​件

linux-在64位Debian Wheezy多体系结构主机上编译使用ssl的32位二进制文​​件

作者:互联网

我正在尝试在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/gcc/x86_64-linux-gnu/4.7/collect2 –sysroot=/ –build-id
–no-add-needed –eh-frame-hdr -m elf_i386 –hash-style=both -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib32/crt1.o
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib32/crti.o
/usr/lib/gcc/x86_64-linux-gnu/4.7/32/crtbegin.o
-L/usr/lib/i386-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.7/32 -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../i386-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib32 -L/lib/i386-linux-gnu -L/lib/../lib32 -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib32 -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../i386-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../.. -L/lib/i386-linux-gnu -L/usr/lib/i386-linux-gnu -lssl /tmp/ccI9DoNH.o -lgcc –as-needed -lgcc_s –no-as-needed -lc -lgcc –as-needed -lgcc_s –no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.7/32/crtend.o
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib32/crtn.o

这似乎表明它正在搜索/usr/lib / i386-linux-gnu /,即​​libssl.so.1.0.0所在的位置.

根据文件,所有文件似乎都是有效的:

/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 wheezylibssl-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

标签:32bit-64bit,debian,gcc,openssl,linux
来源: https://codeday.me/bug/20191121/2051295.html