Боюсь, вы смешали понятия библиотеки и заголовка.
Допустим, у вас есть библиотека libmylib.a
, которая содержит функцию myfunc()
и соответствующий заголовок mylib.h
, который определяет ее прототип. В вашем исходном файле myapp.c
вы включаете заголовок, либо напрямую, либо включаете другой заголовок, который его включает. Например:
/* myapp.h
** Here I will include and define my stuff
*/
...
#include "mylib.h"
...
ваш исходный файл выглядит так:
/* myapp.c
** Here is my real code
*/
...
#include "myapp.h"
...
/* Here I can use the function */
myfunc(3,"XYZ");
Теперь вы можете скомпилировать его для получения myapp.o
:
gcc -c -I../mylib/includes myapp.c
Обратите внимание, что -I просто сообщает gcc, где находятся файлы заголовков, они не имеют никакого отношения к самой библиотеке!
Теперь вы можете связать ваше приложение с реальной библиотекой:
gcc -o myapp -L../mylib/libs myapp.o -lmylib
Обратите внимание, что переключатель -L
сообщает gcc, где находится библиотека, а -l
указывает ему связать ваш код с библиотекой.
Если вы не выполните этот последний шаг, вы можете столкнуться с проблемой, которую вы описали.
Могут быть и другие более сложные случаи, но из вашего вопроса, я надеюсь, этого будет достаточно для решения вашей проблемы.