환경: CentOS 7.1 64비트, Intel i7-4771 Gnome 3 쉘 사용
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 하위 디렉터리가 누락되어 문제가 있음이 표시됩니다. 특히, 로더는 물론 ZIP 파일에는 없는 꽤 많은 SSE2 라이브러리를 찾으려고 시도합니다. 모든 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
루트로 실행했습니다. 이제 괜찮아!
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