gpt4 book ai didi

c++ - 从 Linux 到 Windows 交叉编译时应该如何处理字符编码?

转载 作者:可可西里 更新时间:2023-11-01 11:08:58 28 4
gpt4 key购买 nike

在使用mingw从Linux交叉编译到Windows时,应该如何处理字符编码/转换问题?


我正尝试在 Linux 系统上为 Windows 目标交叉编译 Qt 项目。我已经安装(我认为是)所有必需的 mingw 包,我认为我的环境配置正确。但是,当我尝试配置 Qt 库时,它在尝试编译 project.cpp 时失败了:

project.cpp: In member function 'QStringList& QMakeProject::values(const QString&, QMap<QString, QStringList>&)':
project.cpp:3062:51: error: cannot convert 'wchar_t*' to 'LPSTR {aka char*}' for argument '1' to 'WINBOOL GetComputerNameA(LPSTR, LPDWORD)'
gmake: *** [project.o] Error 1

我能够通过将代码中的 wchar_t* 替换为 LPSTR 来绕过这个错误,但随后我遇到了另一个错误。很明显,我现在正面临字符编码问题。我想象可能有一些编译器选项可以正确处理转换(我正在查看 fexec-charset),但我什至不确定这个问题。我知道 LPSTR 等是 Microsoft typedef,但是当从 Linux 为 Windows 目标进行交叉编译时,mingw 应该如何处理它们?

谢谢!


这是 qmake/project.cpp 中有问题的代码行:

DWORD name_length = 1024;
wchar_t name[1024];
if (GetComputerName(name, &name_length))
ret = QString::fromWCharArray(name);

似乎 GetComputerName 是一个正在扩展为 GetComputerNameA 的宏,而显然我需要 GetComputerNameW

最佳答案

默认情况下,几乎所有 Windows API 函数(例如 GetComputerName)都将解析为 ANSI 实现(例如 GetComputerNameA),而不是它们的宽字符变体(例如 GetComputerNameW)。

尝试 #define UNICODE在你的 #include <windows.h> 之前或将宏作为参数传递给编译器。

有关详细信息,请参阅 thisthis .

关于c++ - 从 Linux 到 Windows 交叉编译时应该如何处理字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10932249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com