记录在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",让编译器静态链接所需标准库后可以解决,但编译出的可执行文件占用空间变大

 

posted @ 2024-11-25 14:04  FfD4edyo  阅读(3)  评论(0编辑  收藏  举报