最近到了新的公司,在Windows平台下做qt开发,编译器用MinGW,看串口编程时遇到找不到函数实现问题,网上搜了一下资料,记录一下。
摘自:http://hi.baidu.com/cyberniuniu/item/d64ae55e8ec606cbd2e10c6f
MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊。
但是 MinGW 下使用和创建 DLL 倒是要特别注意,问题主要集中在 g++ 编译器(C++ 的 GNU 版本编译器)对于 DLL 的函数输入以及
输出的名称修饰、调用协议上和 VC 编译器是有很大区别的。
1、MinGW 如何使用一个标准的 DLL。这里标准 DLL 指的是采用 __stdcall 调用协议、并且导出函数名称干干净净,
没有函数名尾部的 @nn、没有函数名头部的下划线的。MinGW 的 g++ 程序中,对于需要从 DLL 中导入的函数,声明时必须要用 extern "C",
但不要用 __declspec(dllimport),虽然 g++ 支持,但是一旦你使用,则 g++ 在链接时会自动强制在需要导入的函数名前加 _imp__ 前缀,
导致链接时找不到函数名错误。所以,我们其实完全不需要用 __declspec(dllimport)。另一方面,gcc/g++ 编译器遇到代码中 __stdcall 修饰的函数名,
会自动将其函数名在链接时设置为函数名@nn,nn 是函数参数栈字节数。另外,gcc/g+