Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как подключать библиотеки?


Автор: Гость_Anton. 2.1.2004, 16:22
Как, мне, например, подключить в линухе библиотеку SVGAlib?
Если сделать инклуд, то файл компилится, только без команды -lvga, при попытке вызвать библиотечную функцию - не компилится. С командой -lvga не компилится вообще.
Библиотека представляет собой архив, состоящий из множества файлов.

Если комапть дальше, то мне попросту нужно писать простенькие программки с графикой под линукс в универ. Вот так.

Буду признателен, если кто-нибудь подскажет. =)

Автор: vickr 2.1.2004, 18:05
При указании -lvga (это, кстати, ключ компоновщика, а не компилятора), ты говоришь линкеру искать внешние символы (в частности, те имена функций, которые содержатся в заголовочном файле подключаемой библиотеки), в первую очередь, в файле libvga.so (динамической библиотеке), затем, если оная не найдена, в архиве libvga.a. Т.е. процесс построения исполняемого модуля состоит из 2 этапов - компиляции, когда достаточно только объявлений, содержащихся в хедерах, и компоновки, когда объектные файлы (результаты компиляции) объединяются в один исполняемый файл.
Более предметно:
gcc -c myfile.c
gcc -o myfile myfile.o -lvga
Здесь возможны еще ключи с указанием путей для поиска заголовочных файлов (при компиляции) и библиотек (при компоновке, если они не находятся в стандартных каталогах типа usr/lib).
Как правило, эти 2 этапа допучкается указывать в одной строке (сразу флаги -с и -о).
Это кусок теории, лично я не работал с графикой под линухом - просто изложил общие концепции, на которых можно споткнуться с непривычки. Конкретная ошибка может заключаться в чем угодно - необходимо уточнение. Ты говоришь, что
Цитата
Библиотека представляет собой архив, состоящий из множества файлов
- не совсем понятно... дело в том, что архив - это один файл (как правило, с расширением .a), состоящий из нескольких объектных файлов (близкий аналог .lib-файла в виндах), другими словами, статическая библиотека. Если libvga.a - это и есть тот архив, то сразу ничего дельного на ум не приходит - разве что ошибка в имени файла (libsvga?). Повторюсь, с графикой не работал - поэтому делаю самые общие предположения smile.gif. Если там действительно несколько библиотечных файлов, то, возможно, ты просто подключаешь не тот или не те. Одним словом, пробегись внимательно по проекту, может быть, ошибка на самом деле где-то на поверхности.
Удачи.

Автор: Гость_Anton 3.1.2004, 02:24
vickr
Ох, спасибо огромное, за такой развернутый ответ.
когда говорил про несколько файлов имел ввиду дистрибутив, в который запакованы файлы библиотеки. Вот.
Вобщем, очевидно, что я должен указать, где искать эти файлы при компановке. Попробую. =)

Автор: Гость_Anton 3.1.2004, 02:26
Да, вот как мне это сделать?
при прописке -lvga ошибка такая: cannot find -lvga.
Как направить компановщик по нужному пути?

Автор: vickr 3.1.2004, 09:39
Для начала попробуй найти файлы libvha.* или лучше *vga*. Запусти поиск с корневого, включая поддиректории, если у тебя не слишком разбухшая система или поищи по очереди в локальных директориях, находящихся в корне (/root (если ты root:) ), /usr, /lib и т.д.).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)