2012-03-02 2 views
2

GCC를 사용하여 C 코드를 하나의 모 놀리 식 실행 파일 (이 파일의 모든 종속성 포함)로 컴파일하려고합니다.C - 정적 파일 컴파일

gcc -o server ex-serv-x509.c -lgnutls 

을하지만이 -static 인수와 함께 컴파일 할 때이 오류가 얻을 : 보통 나는이 명령을 사용하여 코드를 컴파일 할 수 있습니다

[[email protected] test]# gcc -static -o server ex-serv-x509.c -lgnutls 
/usr/bin/ld: cannot find -lc 
collect2: ld returned 1 exit status 
[[email protected] test]# 

나는이 문제를 해결할 수있는 방법을?

최고의 소원

+5

정적 실행 파일을 빌드하는 가장 좋은 방법은 1986 년으로 여행하는 것입니다. –

+0

libc.a가 있습니까? – hirschhornsalz

+0

몇 가지 추가 정보를 제공해 주시겠습니까? –

답변

3

-static 옵션없이 연결 있는지 확인하기 위해 ldd 명령을 사용하십시오. 내가 가지고있는 어리석은 프로그램을 위해 내가 얻은 것은 이것이다.

~$ gcc so.o -lm -o so 
~$ ldd so 
    linux-gate.so.1 => (0x00db7000) 
    libm.so.6 => /lib/libm.so.6 (0x00c7f000) 
    libc.so.6 => /lib/libc.so.6 (0x0037f000) 
    /lib/ld-linux.so.2 (0x002da000) 
~$ gcc so.o -static -lm -o so 
~$ ldd so 
    not a dynamic executable 

정적이 없기 때문에 나는 자동으로 libc의 공유 버전을 얻습니다.이 버전은 없어서는 안되지만 놀랐습니다. 정적 버전이 아니라 공유 버전을 가지고 있다고 가정하면, 1986 년이 당신을위한 해라고 결정하면 정적 라이브러리를 얻을 필요가 있습니다 :-).

할 수있는 작업 : gcc -print-search-dirs을 검색하여 libc.a를 찾을 수 없도록하십시오.