我正在尝试在 Ubuntu 14.04 x64 上运行旧的 32 位应用程序。我已经通过 安装了基本的 32 位支持sudo apt-get install libc6-i386
,但现在我收到一条关于共享库的令人困惑的消息。似乎是说它无法加载我的库,因为它是 x64,但事实并非如此——整个东西都是 32 位的。
user@ubuntu-develop:~/Desktop/MyApp/bin$ ./MyApp
./MyApp: error while loading shared libraries: libMyApp.so.1: wrong ELF class: ELFCLASS64
user@ubuntu-develop:~/Desktop/MyApp/bin$ file libMyApp.so.1
libMyApp.so.1: symbolic link to `libMyApp.so.1.0.0'
user@ubuntu-develop:~/Desktop/MyApp/bin$ file libMyApp.so.1.0.0
libMyApp.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=701d820fbe229a015ba4c56b61015c08bb2c4ac0, not stripped
user@ubuntu-develop:~/Desktop/MyApp/bin$ file MyApp
MyApp: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, BuildID[sha1]=1f736df460b9754633c7d67284674da395dc31c8, not stripped
我假设它实际上仍然被一些较低级别的依赖所窒息,例如libc
or libssl
or libwhatsit
,但是有没有办法找出真正的罪魁祸首是哪一个,而不是反复试验?
我最终用一个新的 CentOS i386 vm 重新开始,在运行它的过程中发现二进制文件需要
libstdc++5
. 回到 Ubuntu,通过安装sudo apt-get install libstdc++5:i386
似乎已经成功了。