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 中找到该对象。
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 中找到该对象。