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

时间:2018-12-06 04:28:35

标签: c++ c gcc cygwin mingw

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 :(得分:2)

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

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