2011-04-25 3 views
1

mudflap 라이브러리가 설치되어 있지 않고 다른 glibc 버전이있는 다른 Linux 배포판에서 프로그램을 실행해야합니다. 나는 -static 내 프로그램을 컴파일 시도했지만 그것은 불가능하다 :gcc -nostdlib 및 mudflap

 
warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 

그래서, 내가 -nostdlib을 시도하고 수동으로 libs와 연결 만 얻을 이러한 오류 :

 
[email protected]:~/Desktop$ gcc -nostdlib -Wl,-dynamic-linker,/home/myuser/Desktop/ld-linux-x86-64.so.2,-rpath,/home/myuser/Desktop /home/myuser/Desktop/libc.so.6 -fmudflap /home/myuser/Desktop/libmudflap.so.0 /home/myuser/Desktop/libdl.so.2 simple.c 
[email protected]:~/Desktop$ ./a.out 
mf: dlsym("mmap") = NULL 
Aborted (core dumped) 
[email protected]:~/Desktop$ ldd a.out 
    linux-vdso.so.1 => (0x00007fff2bad2000) 
    libc.so.6 => /home/myuser/Desktop/libc.so.6 (0x00007fddfd521000) 
    libmudflap.so.0 => /home/myuser/Desktop/libmudflap.so.0 (0x00007fddfd175000) 
    libdl.so.2 => /home/myuser/Desktop/libdl.so.2 (0x00007fddfcf70000) 
    /home/myuser/Desktop/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fddfd884000) 
[email protected]:~/Desktop$ 
  1. 어느 게 정말 쓰이고 있니? 내 바탕 화면이나/lib64에있는 파일?
  2. 올바르게 컴파일하려면 어떤 다른 플래그가 포함되어야합니까?
+0

다른 컴퓨터에 배포하는 프로그램에서 mudflap을 사용하는 이유가 있습니까? 그것은 디버깅 도구입니다 ... –

답변

0

라이브러리를 정적으로 연결하려고 시도하는 대신 실행 파일로 옮기고 LD_LIBRARY_PATH 또는 rpath가 포함 된 디렉토리를 가리 키도록하십시오.

그러나 libc를 절대 가지고 다니지 마십시오. 이전 libc 버전에서 프로그램을 링크하는 경우 안전해야합니다. 즉, 대상 시스템보다 오래되었거나 정확히 동일한 환경에서 응용 프로그램을 컴파일해야합니다.

컴파일 시스템과 대상 시스템간에 버전이 지정된 업데이트가있는 기호를 사용하지 않는 한 최신 시스템을 사용하지 못할 수도 있습니다.

정적 연결은 불행히도 소리보다 훨씬 복잡합니다.

0

그리 복잡하지 않습니다. strace를 사용하여 바이너리 링크가 될 라이브러리를 찾으십시오.

gcc -Xlinker -rpath =/path/to/제공된/libs -Xlinker -I/path/to/제공된/링커 /ld-2.11.2.so -std = c99 -D_POSIX_C_SOURCE = 200112L -fmudflap/path /to/provided/mudflap/libmudflap.so.0 simple.c