#c #linker
#c #компоновщик
Вопрос:
Я хочу знать, как я могу использовать статическую библиотеку на C , которую я создал, сначала библиотеку:
// header: foo.h
int foo(int a);
.
// code: foo.cpp
#include foo.h
int foo(int a)
{
return a 1;
}
затем я сначала компилирую библиотеку:
- g foo.cpp
- ar rc libfoo.a foo.o
теперь я хочу использовать эти библиотеки в каком-нибудь файле, например:
// prog.cpp
#include "foo.h"
int main()
{
int i = foo(2);
return i;
}
как мне теперь их скомпилировать?
Я сделал:
g -L. -lfoo prog.cpp
но выдает ошибку, потому что функция foo не найдена
Комментарии:
1.
g -L. -lfoo prog.cpp libfoo.a
IIRC2. @sehe: -lfoo примерно эквивалентно перечислению libfoo.a в командной строке. Однако порядок имеет значение.
Ответ №1:
Вы хотите:
g -L. prog.cpp -lfoo
К сожалению, компоновщик ld чувствителен к порядку библиотек. При попытке удовлетворить неопределенные символы в prog.cpp он будет просматривать только библиотеки, которые появляются ПОСЛЕ prog.cpp в командной строке.
Вы также можете просто указать библиотеку (с путем, если необходимо) в командной строке и забыть о флаге -L:
g prog.cpp libfoo.a
Комментарии:
1. Правильно, и на случай, если пользователь захочет узнать почему, эта ссылка объясняет в довольно кратких терминах порядок компоновки слева направо. (Ах, после того, как я добавил этот комментарий, ответчик добавил немного дополнительной информации).