Вопрос:

Попытка скомпилировать с моей собственной статической библиотекой C

c gcc static-libraries ar .a

376 просмотра

1 ответ

157 Репутация автора

Я собрал статическую библиотеку. У меня есть два файла.

  • mylib_1.cс функцией foo1в нем
  • mylib_2.cс функцией foo2в нем.

Оба #include "mylib.h".

Я скомпилировал библиотеку так:

gcc -c mylib_1.c -o mylib_1.o
gcc -c mylib_2.c -o mylib_2.o
ar cr mylib.a mylib_1.o mylib_2.o

Затем я попытался скомпилировать mylib_test.cс моей библиотекой.

#include "mylib.h"

int main(void)
{
    foo1("do something cool");
    foo2("do something cool");

    return 0;
}

Если я собираю как gcc mylib_test.c mylib.a, GCC успешно и все работает нормально.

Если я скомпилирую как gcc mylib_test.c -Lmylib.a, GCC не с:

C:\path\to\mylib_test.c:x: undefined reference to foo1
C:\path\to\mylib_test.c:x: undefined reference to foo2

Почему GCC терпит неудачу?

Если это будет важно, я использую последнюю версию MinGW для Windows 7.1.

Автор: DEADBEEF Источник Размещён: 08.03.2017 10:53

Ответы (1)


6 плюса

1097 Репутация автора

Решение

Вы, вероятно, хотите -lфлаг вместо -Lфлага для GCC. -Lдобавляет пути к библиотекам, а -lссылки на библиотеку.

Кроме того, если вы создаете эту статическую библиотеку для Linux, ее имя должно начинаться с lib(но не обязательно , спасибо @davmac за упоминание). Таким образом, имя файла вашей библиотеки должно быть libmyLib.a, а затем вы должны ссылаться на него -lmyLib. (Да, я тоже нахожу это неловким.)

Я не знаю о Windows, но я думаю, что эквивалент статической библиотеки Windows просто myLib.lib. Пожалуйста, сначала проверьте это утверждение, если вы делаете библиотеку Windows.

Подробнее здесь .

Автор: AnthonyD973 Размещён: 08.03.2017 10:57
Вопросы из категории :
32x32