Mingw очень очень простой код, сообщить неопределенную ссылку на XXX - PullRequest
0 голосов
/ 06 декабря 2018
extern int aabbcc;
void fun1()
{
    aabbcc = 1;
}

скомпилируйте его с помощью mingw

i686-w64-mingw32-gcc -shared -o a.dll a.c

сообщает об ошибке: неопределенная ссылка на 'aabbcc'

скомпилируйте его с Linux GCC, все в порядке

gcc -fPIC -shared -o liba.so a.c

ПОЧЕМУ?в чем разница между linux-gcc и mingw?

1 Ответ

0 голосов
/ 06 декабря 2018

В Linux .so-файлам разрешено иметь неопределенные ссылки.Когда .so загружается в процесс, он пытается найти ссылку в любой другой .so или основной программе..So даже не нужно знать, где находится указанный объект.

В Windows файлам .dll не разрешено иметь неопределенные ссылки..Dll должен либо определить сам объект, на который есть ссылка, либо сообщить загрузчику, в каком другом .dll найти объект.

...