C - Скомпилировать статический файл - PullRequest
2 голосов
/ 02 марта 2012

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

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

Но когда я пытаюсь скомпилировать его с этим аргументом -static, я получаю эту ошибку:

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

Как мне решитьпроблема?

С наилучшими пожеланиями

1 Ответ

3 голосов
/ 03 марта 2012

Попробуйте использовать команду 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 не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...