Я пытаюсь узнать, как создать библиотеку C / C ++ в среде Linux, но у меня возникла проблема (возможно, тривиальная), которую онлайн-учебники не помогли решить.
Для определенности предположим, что у меня есть файл foo.c со следующим кодом:
//file: foo.c
#include <stdio.h>
void hello(void)
{
printf("hello!\n");
}
foo.h:
//file: foo.h
void hello(void);
и программа, которая использует функцию hello () из foo.c с именем prog.c:
//file: prog.c
#include "foo.h"
int main(void)
{
hello();
return 0;
}
Все три файла находятся в одном каталоге. Затем я скомпилировал foo.c с:
gcc -fPIC -c foo.c
и получил файл foo.o. Затем я использовал ld для создания файла библиотеки:
ld -G foo.o -o libfoo.so
Но когда я пытаюсь скомпилировать prog.c с:
gcc -o prog prog.c -lfoo
Я получил сообщение об ошибке:
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
Я убежден, что это какая-то тривиальная проблема пути, но я не смог найти решение. Так что мой вопрос на самом деле, если эта процедура не так, или я должен поместить файл libfoo.so в специальный путь.
Другой вопрос, как это меняется, если я использую g ++ вместо gcc.
Спасибо.
EDIT:
Я знаю, что могу скомпилировать как prog.c, так и foo.c в prog.o и foo.o, а затем связать их для создания исполняемого файла. Но в моей исходной задаче я хочу скомпилировать foo.c таким образом, чтобы я мог распространять его среди людей, которые будут использовать мои функции в своих собственных программах.