2012-03-02 2 views
2

Я хочу скомпилировать код C в один монолитный исполняемый файл (включая все зависимости в этом файле) с помощью GCC. Обычно я могу скомпилировать код с помощью этой команды: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

Попробуйте использовать команду ldd, чтобы увидеть, что это соединение в без опции -static. Вот что я получаю за глупую программу, которую у меня есть.

~$ 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 не найден.

Смежные вопросы