环境:CentOS 7.1 64位,使用Intel i7-4771 Gnome 3 shell
我下载了 Aardvark Control Center(Total Phase)并尝试执行 controlctr bash 文件,但是收到错误消息“无法执行应用程序”。我不确定问题出在供应商 Total Phase 上,但我认为问题出在 Linux 中的某些东西上。
我在网上搜索并想出了这个链接用于故障排除。论坛帖子很有帮助。 Aardvark Control Center 是一个 32 位应用程序,在本例中它将在 CentOS 7 的 64 位 i7 版本上运行。命令“file controlctr.bin”显示标准 ELF 格式。我从论坛帖子中复制并粘贴,但实际行是相似的,即使不完全相同。
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
“$ldd controlctr.bin”显示的行与论坛帖子非常相似,即
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/libdl.so.2 (0xb76fe000)
libpthread.so.0 => /lib/i686/libpthread.so.0 (0xb76e4000)
libc.so.6 => /lib/i686/libc.so.6 (0xb7566000)
/lib/ld-linux.so.2 (0xb771f000)
我运行了 strace -o controlctr.bin。
日志显示问题是 Linux 目录中缺少 tls 子目录。特别是,加载程序会尝试查找相当多的 SSE2 库,这些库当然不存在于 ZIP 文件中。每个 SSE2 库调用的日志中都充斥着“没有这样的文件或目录”错误消息;因此最终出现错误消息。这是日志文件的相关部分。
readlink("/proc/self/exe", "/home/jmr/Downloads/control-ctr-"..., 1023) = 76
execve("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/controlctr.bin", ["controlctr.bin"], [/* 47 vars */]) = 0
brk(0) = 0x9214000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff76ed000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/i686/sse2/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/i686/sse2", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/i686/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/i686", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/sse2/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/sse2", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/tls", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/i686/sse2/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/i686/sse2", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/i686/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/i686", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/sse2/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/sse2", 0xffd3eb30) = -1 ENOENT (No such file or directory)
open("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/jmr/Downloads/control-ctr-serial-linux-i686-v3.83/linux", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
我在网上搜索了这些库以及有关此问题的帮助,但一无所获。我确实知道 SSE2 是较新处理器的功能,其中包括 Intel i7 CPU,这可能就是 controlctr.bin 文件查找这些库的原因。
我确实找到了这个SSE2问题在 U&L 论坛上。
回答SSE2上提出的问题。
[root@jmr-server1 linux]# cat /proc/cpuinfo | grep flags | tail -n 1
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
[root@jmr-server1 linux]# uname -a
Linux jmr-server1 3.10.0-229.11.1.el7.x86_64 #1 SMP Thu Aug 6 01:06:18 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@jmr-server1 linux]# gcc --version
gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
有什么想法吗?
答案1
我刚刚在 Ubuntu 16.04 64 位下遇到了类似的问题。我采用了您的 s-trace 方法,开始一一安装 i386 库,然后再次尝试该应用程序。在我安装了一些库后,GUI 启动了。它检测到我的设备,但没有权限[我没有安装 udev 规则],所以我只是controlctr.bin
以 root 身份执行。现在可以了!
要安装 i386 版本的库,只需在库名称后添加 :i386
例如,我必须安装这些[从 controlctr.bin 上运行 strace 的末尾抓取]:
sudo apt-get install libgtk2.0-0:i386
sudo apt-get install libpango-1.0-0:i386
sudo apt-get install libpangox-1.0-0:i386
sudo apt-get install libpangoxft-1.0-0:i386