Вызов функции в статической библиотеке без реализации

#c #static-libraries

#c #статические библиотеки

Вопрос:

Я хотел бы знать, возможно ли в статической библиотеке вызвать функцию, реализация которой находится в моем приложении, а не в библиотеке.

Вот так:

Статическая библиотека

foo.h

 void foo_func();
  

foo.c

 #include "foo.h"

void foo_func()
{
    app_func();
}
  

Приложение

main.c

 #include <foo.h>

uint8_t flag = FALSE;

uint8 main()
{
    foo_func();

    while(!flag);

    return 0;
}

void app_func()
{
     flag = TRUE;
}
  

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

1. Эй, это так сложно протестировать?

2. Это так, но это также очень плохой способ настройки. Расскажите нам о вашей реальной проблеме.

3. Лучше, чтобы приложение передавало указатель функции в библиотеку во время выполнения. Тогда это будет работать и с динамической библиотекой.

Ответ №1:

Статическая библиотека, созданная с помощью ar , — это просто архив .o объектных файлов. Вы можете вызывать любые внешние функции в статической библиотеке, созданной с помощью ar , присутствующей или нет, как с любым .o файлом. Хотя это возможно, обратный вызов приложения, возможно, не лучший выбор дизайна.

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

1. Почему это плохой выбор дизайна?