记录在linux平台使用mingw编译windows exe时遇到的一些问题
提示找不到std:u8string类型
原因是没有指定c++版本, 默认的版本太低
可以添加编译器参数
例如
-std=c++2a
提示找不到Windows.h
原因是大小写问题, 之前使用msvc构建工具时使用的是大写开头, 改成小写开头就可以找到了
提示找不到WC_ERR_INVALID_CHARS和GetQueuedCompletionStatusEx
原因是默认的宏"_WIN32_WINNT"定义的版本小于0x0600, 需要大于等于0x0600时mingw提供的头文件中才会定义相应的函数
解决办法就是手动定义一下宏"_WIN32_WINNT"的值, 让值大于或等于0x0600,
例如
#define _WIN32_WINNT 0x0600
提示undefined reference to `__imp_WSAGetLastError'等
原因是可以被msvc构建工具识别的指令会被忽略
例如下面的指令会无效
#pragma comment(lib,"Ws2_32.lib") #pragma comment(lib,"Wininet.lib")
可以在命令行中添加上需要链接的库名字
例如
x86_64-w64-mingw32-g++ -std=c++2a -static test.cpp -lws2_32 -lwininet -o test.exe
其中"-lws2_32"与"-lwininet"与源代码文件一并输入给编译器
编译出的可执行程序在windows平台运行提示找不到libstdc++-6.dll
添加编译命令"-static",让编译器静态链接所需标准库后可以解决,但编译出的可执行文件占用空间变大