1

Вопрос по ubuntu-12.04, gcc, glibc, c, linux – как gcc автоматически знает, как включить библиотеку glib

Я делаю простую программу на C, которая используетglib.h, но когда я его компилирую, я получаю сообщение об ошибке вроде:

$ gcc test.c -o test
test.c:3:18: fatal error: glib.h: No such file or directory
compilation terminated.

Так что сверху кажется, что GCC не может найтиglib.h файл (который является частьюlibglib2.0-dev пакет и уже установили его). Итак, сначала я пытаюсь найтиglib.h файлы в моей системе и нашли вывод, как показано ниже:

$ locate glib.h
/usr/src/linux-headers-3.2.0-29-generic-pae/include/config/blk/dev/bsglib.h
/usr/src/linux-headers-3.2.0-48-generic-pae/include/config/blk/dev/bsglib.h
/usr/src/linux-headers-3.2.0-57-generic-pae/include/config/blk/dev/bsglib.h

тогда я попробовал команду:

$ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include  

чтобы получить правильные флаги для GCC, но все равно он показывает ту же ошибку.

Так что попробуйте найти решение от SO и нашли точное решение, как

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

эта команда решит мою проблему

Но у меня есть вопрос, что нет никакого способа сказать gcc включить библиотеку glib, поэтому не требуется указывать флагpkg-config --cflags --libs glib-2.0 послеgcc и просто я компилирую свой файлgcc test.c -o test?

Просто напишитеMakefile (один раз и обновите его с помощью кода) и введитеmake построить свою программу.

от Basile Starynkevitch

да, я знаю оmake, Я просто собираю свой источникmake test pkg-config --cflags --libs glib-2.0, И спасибо за предложение по слиянию имен между бинарной и встроенной оболочкой.

от Jayesh Bhoi

Узнайте, как использоватьmake, Увидетьэтот ответ на очень похожий вопрос. И не называйте свой исполняемый файлtest; это полезная встроенная оболочка, или/usr/bin/test, увидетьТест (1)...

от Basile Starynkevitch
1 ответ
4

Нет.

Проблема просмотра исходного кода C и выяснения, какие библиотеки он использует, очень сложна. Такое чувство"ИИ завершен" для меня, именно поэтому он обычно решается вручную программистом, указывая точные правильные библиотеки для удовлетворения зависимостей.

Просто для glib легко представить систему с установленными версиями glib 1.x и 2.x, а некоторые вызовы названы одинаково. Теперь попробуйте представить компьютерную программу, способную определить, что вы имели в виду, какую библиотеку связать. Это невозможно, так как знает только программист.

pkg-config Инструмент помогает с механикой того, что требует каждая библиотека для использования, но это все еще до вас, чтобы сказать это (через аргумент (ы) имени модуля)который точные библиотеки для использования.

о, я вижу .. спасибо за ваше разъяснение.

от Jayesh Bhoi

Да, это дает вам путь включения дляglib-2.0 пакет, который является 2.x версией библиотеки glib. Но эта информация, конечно, должна как-то передаваться в gcc, это не значит, что gcc находится на вашем плече и читает ваш терминал ...

от unwind

хорошо, но если я выполнюpkg-config --cflags glib-2.0 команда от терминала, тогда это включить путь для библиотеки Glib? Если да, то после этого моя командаgcc test.c -o test должно работать.

от Jayesh Bhoi

Похожие вопросы