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

Другие вопросы по тегам