mingw 非常非常简单的代码,报告对XXX的未定义引用

mingw very very simple code, report undefined reference to XXX

extern int aabbcc;
void fun1()
{
    aabbcc = 1;
}

用mingw编译

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

报告错误:对 'aabbcc'

的未定义引用

用linuxgcc编译就可以了

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

为什么? linux-gcc 和 mingw 有什么区别?

在Linux中,.so文件允许有未定义的引用。当 .so 加载到进程中时,它会尝试在任何其他 .so 或主程序中找到引用。 .so 甚至不必知道引用对象的位置。

在Windows中,.dll文件不允许有未定义的引用。 .dll 必须自己定义引用的对象,或者告诉加载程序在哪个其他 .dll 中找到该对象。