как добавить статическую библиотеку (.a) в программу на C ?

#c #linker

#c #компоновщик

Вопрос:

Я хочу знать, как я могу использовать статическую библиотеку на C , которую я создал, сначала библиотеку:

 // header: foo.h
int foo(int a);
  

.

 // code: foo.cpp
#include foo.h
int foo(int a)
{
    return a 1;
}
  

затем я сначала компилирую библиотеку:

  1. g foo.cpp
  2. 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 IIRC

2. @sehe: -lfoo примерно эквивалентно перечислению libfoo.a в командной строке. Однако порядок имеет значение.

Ответ №1:

Вы хотите:

 g   -L.  prog.cpp -lfoo
  

К сожалению, компоновщик ld чувствителен к порядку библиотек. При попытке удовлетворить неопределенные символы в prog.cpp он будет просматривать только библиотеки, которые появляются ПОСЛЕ prog.cpp в командной строке.

Вы также можете просто указать библиотеку (с путем, если необходимо) в командной строке и забыть о флаге -L:

 g   prog.cpp libfoo.a
  

Комментарии:

1. Правильно, и на случай, если пользователь захочет узнать почему, эта ссылка объясняет в довольно кратких терминах порядок компоновки слева направо. (Ах, после того, как я добавил этот комментарий, ответчик добавил немного дополнительной информации).