Как добавить предварительно скомпилированную библиотеку в ESP8266 SDK?

У меня есть предварительно скомпилированная библиотека (расширение .a), которую я хочу использовать, интегрированная в примеры ESP8266 RTOS SDK.

По следующему пути есть папка (ESP8266_RTOS_SDK components esp8266 lib), в которой находится 22 .a файла. Я положил туда свою библиотеку, но компилятор как бы не распознает функции моей библиотеки.

Я прочитал кое-что о редактировании некоторых make-файлов. Должен ли я действительно сделать это? Если да, я хотел бы знать, какой файл редактировать? (на каком пути он находится)

РЕДАКТИРОВАТЬ

Это моя рабочая папка:

введите описание изображения здесь

Espressif (разработчик ESP8266) нацелил меня на то, чтобы сделать как показано ниже на component.mk , но это не сработало, компиляция продолжает показывать «неопределенную ссылку» для функции lib.

введите описание изображения здесь

Затем я создал переменную окружения COMPONENT_PATH в Windows, путь которой такой же, как показано на первом рисунке.

введите описание изображения здесь

Что-то не так с этим?

РЕДАКТИРОВАТЬ 2

Созданная папка "include" внутри main:

введите описание изображения здесь

Добавлен поверх кода C: #include "include / lib123.h" , который содержит только одну строку: int sum (int a, int b);

Добавлено на основной вызов: int result = sum (1,2);

Получена ошибка компилятора: неопределенная ссылка на «сумму»

Всего 1 ответ


Задачей компоновщика является не компилятор, а компоновщик кода библиотеки объектов.

Недостаточно просто поместить библиотеку в папку, компоновщик должен знать путь к библиотеке и имя библиотеки. Файл не обязательно должен находиться в той же папке, что и другие библиотеки, хотя это позволит избежать добавления дополнительного пути к библиотеке в командной строке компоновщика.

Если используется цепочка инструментов GNU, компоновщик (ld) регистрирует пути к библиотекам с помощью -L<searchdir> , а для библиотеки с именем libXXX.a , ключ для связи с ним - -lXXX .

например:

ld -o program.elf main.o module.o -L.MyLibraries -llinkthis.a

свяжет liblinkthis.a в подпапке MyLibraries каталога сборки.

Если для компиляции и компоновки используется драйвер gcc или g++ , эти ключи можно передать драйверу и использовать для вызова ld . Например:

gcc main.c -o main.o -c
gcc module.c -o module.o -c
gcc -L.MyLibraries -llinkthis.a main.o module.o -o program.elf 

или для сборки из одного источника:

gcc main.c -L.MyLibraries -llinkthis.a -o program.elf

Для других наборов инструментов обратитесь к документации набора инструментов / компоновщика по связыванию статических библиотек.

Для сложных сборок со многими модулями, конечно, вы должны использовать make-файл или аналогичный инструмент управления сборкой, или (проще) IDE с менеджером проекта / сборки. Скорее всего, IDE позволит вам добавлять библиотеки и пути через диалоговые окна, а не знать все отдельные ключи для вашей цепочки инструментов, сборки и аналогичных инструментов, которые могут быть более гибкими для сложных сборок, но в некоторой степени загадочны. Однако использование make не имеет прямого отношения к вопросу о том, как связать статическую библиотеку.


Есть идеи?

10000