基本搞清楚原因了:
当带-shared参数做configure时,生成的<qt-src-dir>/qtbase/src/corelib/qglobal.h会多一个宏定义“Q_VISIBILITY_AVAILABLE”,而在zlib的诸多.c文件中,该宏的存在导致ZEXPORT宏被定义为__attribute__(visibility("default")),经过MinGW编译链接后生成的Qt5Core.dll的lib文件不包含zlib API的重定向信息,因此在编译链接后续需要引用zlib模块API的dll时便出错了(我是在编译QtNetwork.dll时出错)。
暂时的解决办法:
在configure时把-no-reduce-export和-shared配合使用
进一步的思考:
经过实验,发现官网下载的Qt安装包中的MinGW4.9.1 32bit也会产生同样的错误,这说明编译器版本不兼容的可能性很小,于是造成错误的可能只有3个:1.__attribute__(visibility("default"))这个指令不适用于Windows平台;2.MinGW在实现__attribute__(visibility("default"))指令时存在Bug;3.Qt源码的配置脚本configure未充分考虑__attribute__(visibility("default"))和Windows平台的兼容性。最终哪一个才是真正的原因,还有待Qt开发组和各位高人来定位和解决。
注:因为手机打字,没在电脑旁,看不了源代码,文中的__attribute__(visibility("default"))和Q_VISIBILITY_AVAILABLE可能有误,一切以官方源码为准。