测试环境描述
QT5.3.1 + mingw4.8 + vs2008
项目要求
Qt中调用vs2008写的动态库
利用vs2008开发的动态库
VS2008DLL.dll; 导出c类型库(如果导出C++, mingw下调用,编译会不成功的)
#ifdef __cplusplus
extern "C"{
#endif
TEST_EXPORT_EXPORT int add();
#ifdef __cplusplus
}
#endif
测试步骤
1、QT建立测试程序, 调用VS2008DLL.dll中的add()函数; 编译成功。
2、 QT建立静态库, 静态库中函数executeVS2008dll()调用VS2008DLL.dll中的add()函数; 编译成功。
接下来,QT建立测试程序,调用Qt静态中的executeVS2008dll()函数, 这时候, 编译不成功。
error: undefined reference to `_imp__add' ;
3、接下来,用QT动态库去调用VS2008DLL.dll中的add()函数;编译成功。
4、QT建立测试程序,调用Qt动态库中的executeVS2008dll()函数;编译成功。
经过以上测试, 结论。
1、QT动态库封装不会改变VS2008dll函数的导出的名称。
2、QT静态库封装会改变VS2008dll函数的导出的名称。
静态库封装的调用, 编译器一定要一致。