Почему я не могу построить приветливый мир для бойкости?

Итак, вот самая простая в мире программа glib:

#include <glib.h>

Я пытаюсь скомпилировать его с gcc test.c и получаю:

test.c:1:18: error: glib.h: No such file or directory

Поэтому я убеждаюсь, что у меня есть нужные пакеты:

# dpkg -l | grep libglib
ii  libglib-perl                              1:1.183-1                               Perl interface to the GLib and GObject libra
ii  libglib1.2-dev                            1.2.10-19build1                         The GLib library of C routines (development)
ii  libglib1.2ldbl                            1.2.10-19build1                         The GLib library of C routines
ii  libglib2.0-0                              2.20.1-0ubuntu2                         The GLib library of C routines
ii  libglib2.0-cil                            2.12.1-1ubuntu2                         CLI binding for the GLib utility library 2.1
ii  libglib2.0-data                           2.18.2-0ubuntu2                         Common files for GLib library
ii  libglib2.0-dev                            2.20.1-0ubuntu2                         Development files for the GLib library
ii  libglibmm-2.4-1c2a                        2.18.1-1                                C++ wrapper for the GLib toolkit (shared lib

Затем я ищу любой "glib.h" где угодно в / usr / include. Я получаю два: /usr/include/glib-1.2/glib.h и /usr/include/glib-2.0/glib.h. Поэтому я стараюсь:

$ gcc -I/usr/include/glib-2.0 -Wall test.c  
In file included from /usr/include/glib-2.0/glib/galloca.h:34,
             from /usr/include/glib-2.0/glib.h:32,
             from test.c:2:
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory

(вырезано еще около 10 000 ошибок)

Кажется, на моем компьютере нет glibconfig.h.

Что мне теперь делать?


person mike    schedule 17.07.2009    source источник
comment
Может я просто дурак, но зачем вы пытаетесь скомпилировать заголовок?   -  person GManNickG    schedule 18.07.2009
comment
Я начал с более сложной программы, но если #include ‹glib.h› не работает, ничего не будет.   -  person mike    schedule 18.07.2009
comment
Если у вас нет основной функции, она не работать. Замена вашего glib.h на stdio.h тоже не работает. Предполагая, что у вас есть основная функция, правильный ответ - использовать pkg-config, как указано в другом ответе.   -  person Yasushi Shoji    schedule 13.08.2012
comment
@YasushiShoji: gcc -c test.c должен работать нормально, если test.c содержит только #include <stdio.h>. Не помешало бы добавить вторую строку void test(void) { }, но в этом нет необходимости. В случае OP сообщение об ошибке появится независимо от того, что следует за #include <glib.h>.   -  person Keith Thompson    schedule 29.06.2013


Ответы (5)


glib имеет тенденцию скрывать себя ... Ваш оператор include не работает, потому что GCC не выполняет автоматический поиск подкаталогов и поэтому не может видеть glib.h в glib-1.2 или glib-2.0.

Прочтите страницу Компиляция приложений GLib в руководствах по GLIB ... вы используете такие команды, как pkg-config --cflags glib-2.0, чтобы получить правильные флаги для GCC.

Канонический способ делать то, что вы пытаетесь, -

% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0`

Обратите внимание на обратные галочки, которые говорят оболочке выполнить команду pkg-config «на месте».

person Chris Arguin    schedule 17.07.2009
comment
Это не скрытие: glibconfig.h - это список данных, зависящих от архитектуры, поэтому он не относится к / usr / include. Обычно он находится в / usr / lib / glib2 / ... - person ntd; 13.10.2012

> > The canonical way to do what you are trying is

> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0`

Извините, но не. Это распространенное заблуждение, которое в большинстве случаев работает в системах на основе ELF, в частности в Linux. Канонический способ - передать cflags и библиотеки отдельно, в правильных и традиционных местах командной строки, например:

gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0`

Жалко, что pkg-config одновременно принимает параметры --cflags и --libs, так как это означает, что этот неправильный мем никогда не умрет, и люди, привыкшие к нему в Linux, будут по-прежнему сбиты с толку, когда они попытаются то же самое на других платформах.

person tml    schedule 15.02.2010
comment
+1 за храбрость! Строго говоря, имя файла с исходным кодом должно идти в конце после всех опций. - person Chris Huang-Leaver; 15.02.2010
comment
Извините, но это неправда. Вы действительно пробовали сделать это на какой-нибудь платформе, отличной от Linux, например MinGW? См., Например, gcc.gnu.org/onlinedocs/gcc/Link-Options.html., в котором четко сказано, что имеет значение, где в команде вы указываете эту опцию; компоновщик ищет и обрабатывает библиотеки и объектные файлы в том порядке, в котором они указаны. Таким образом, foo.o -lz bar.o' searches library z 'после файла foo.o, но перед bar.o. Если bar.o относится к функциям в `z ', эти функции могут не быть загружены. - person tml; 15.02.2010

Как @chris сказал, используйте pkg-config.

glibconfig.h is missing 

это потому, что этот файл находится не в /usr/include/glib-2.0, а в /usr/lib/glib-2.0.. Таким образом, вы должны также включить этот /usr/lib путь или скопировать файл в /include/glib-2.0

person sobingt    schedule 20.06.2012

Я также использую glib.h - сделайте это, чтобы скомпилировать все свои программы glib.h :)

gcc `pkg-config --cflags --libs glib-2.0` filename.c

Обязательно заключите pkg-config --cflags --libs glib-2.0 в обратные кавычки, которые вы найдете под тильдой (крайняя левая клавиша на клавиатуре Querty).

Спасибо позже ..: P

person Amninder Singh    schedule 19.01.2017
comment
не могли бы вы вставить `в свой код. это меня когда-то сбивало с толку. признал свою вину за то, что не прочитал остальную часть вашего ответа, но фрагмент кода в его нынешнем виде неточен. - person ALM; 29.03.2017

apt-get build-dep - ваш друг - никто не может вспомнить все пакеты, необходимые для создания чего-либо.

person Ken    schedule 17.07.2009
comment
файл доказуемо там, поэтому специфическая для Debian команда управления пакетами не решит проблему. используя pkg-config правильно будет. - person mlibby; 02.03.2012