我正在尝试在 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
或libssl
或)所阻碍libwhatsit
,但有没有办法找出哪一个是真正的罪魁祸首,而无需反复试验?
答案1
我最终从全新的 CentOS i386 vm 开始,在运行过程中发现二进制文件需要libstdc++5
。回到 Ubuntu,通过安装它sudo apt-get install libstdc++5:i386
似乎已经成功了。