Использование статической библиотеки в C
Я нашел полезную библиотеку на GitHub для своего проекта, после сборки этого позже я попытался использовать некоторые предопределенные функции для него. Я не смог скомпилировать свой проект, потому что отсутствует какой-то заголовочный файл, такой как этот:
In file included from main.c:2:0:
ptask.h:11:19: fatal error: ptime.h: No such file or directory
Я скомпилировал свой проект с помощью этой команды:
gcc main.c -L. -lptask
Это все файлы в папке проекта:
libptask.a main.c ptask.h
Это содержимое библиотеки:
$ ar -t libptask.a
pbarrier.c.o
pmutex.c.o
ptask.c.o
ptime.c.o
rtmode.c.o
tstat.c.o
libdl.c.o
dle_timer.c.o
calibrate.c.o
Нужно ли добавлять все заголовки этих файлов или просто ссылаться на lib при компиляции?
3 ответа
Ваш main.c #include
-s ptask.h который в свою очередь #include
-s ptime.h. Одной лишь компиляции статических библиотек недостаточно (это работа компоновщика), вам все равно нужно иметь все используемые заголовочные файлы (которые являются работой компилятора), и те, которые вы используете, и их зависимости, рекурсивно применимые.
В отношении:
gcc main.c -L. -lptask
это выполняет шаг компиляции и шаг ссылки в одной команде.
Также не активируются предупреждения, которые всегда должны быть включены на этапе компиляции.
Предложите что-то похожее на следующее для компиляции
gcc -Wall -Wextra -Wconversion -pedantic -std=gnu11 -g -c main.c -o main.o -I.
и когда вы исправите все предупреждения, используйте ссылку, аналогичную следующей.
gcc main.o -o main -L. -lptask
Обычно вы должны быть уверены, что заголовочные файлы находятся в вашем "пути включения", что определяется многими компиляторами. -I
как параметр командной строки. Вам нужно будет включить исходный каталог этой библиотеки, или если она имеет make install
вариант, то место, где они были установлены.