Попробую написать минимальный воспроизводимый пример. Есть загрузчик динамической библиотеки load.c (не могу разобраться, что он делает, но по методичке должен работать):
#include "load.h"
#include "funcs.h"
#include <stdio.h>
#include <windows.h>
void LoadRun (const char * const s)
{
void * lib;
void (*fun)(void);
lib = LoadLibrary (s);
fun = (void (*)(void)) GetProcAddress ((HINSTANCE) lib, "func");
if (fun == NULL) printf ("Cannot load function.\n");
else fun();
FreeLibrary ((HINSTANCE) lib);
}
load.h:
void LoadRun (const char * const s);
Некоторые функции для обработки данных funcs.h:
short SomeFunction (...);
Главная функция, в которой должна загружаться динамическая библиотека, после чего вызываться функция по обработке данных SomeFunction:
#include "load.h"
int main ()
{
...
LoadRun ("SomeLib.dll");
SomeFunction ();
}
При помощи компилятора GCC пытаюсь создать exe-файл программы. Есть готовые файлы SomeLib.dll, Load.dll, объектный файл программы main.o, но при вводе:
gcc -o I:\...\main.exe I:\...main.o -L./ -lLoad
появляется ошибка:
main.o: undefined reference to 'SomeFunction'
Если я правильно понимаю, компилятор пытается найти SomeFunction не в динамической библиотеке и на этапе компиляции думает, что функция не была объявлена. Как избежать этой ошибки компиляции?