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有什么区别?
答案 0 :(得分:2)
在Linux中,.so文件允许具有未定义的引用。将.so加载到进程中后,它将尝试在任何其他.so或主程序中查找引用。 .so甚至不必知道引用对象的位置。
在Windows中,.dll文件不允许具有未定义的引用。 .dll必须要么定义引用的对象本身,要么告诉加载程序要在哪个其他.dll中找到该对象。