如何处理从Linux到Windows交叉编译时的字符编码/转换问题?
我正试图在Linux系统上为Windows目标交叉编译一个Qt项目。我已经安装了(我认为是的)所有必需的混合包,并且我认为我的环境配置正确。但是,当我尝试配置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
和类似的东西都是微软的类型,但是当从Linux交叉编译到Windows目标时,应该如何混合处理它们呢?
谢谢!
以下是qmake/project.cpp中违规的代码行:
DWORD name_length = 1024;
wchar_t name[1024];
if (GetComputerName(name, &name_length))
ret = QString::fromWCharArray(name);
GetComputerName
似乎是一个正在扩展到GetComputerNameA
的宏,而显然我需要GetComputerNameW
。
发布于 2012-06-07 05:09:35
发布于 2012-06-07 05:00:47
您需要使用WINAPI函数的宽版本:GetComputerNameA
变成GetComputerNameW
,等等。
Unicode版本(又称"wide")以W
作为后缀,而ANSI版本则以A
作为后缀。它们分别接受LPWSTR
和LPSTR
作为字符串参数(LPWSTR是wchar_t*的别名)。
还有一些宏根据您的unicode配置扩展到其中一个或另一个宏。有关示例:GetComputerName,请参阅msdn文档。
发布于 2012-06-07 09:19:55
你把Qt配置错了。
正确配置的Qt构建添加了-DUNICODE -D_UNICODE
(以及其他许多东西),它解决了您所遇到的问题。
交叉编译Qt并不是一项有趣的任务,也不容易正确完成。
https://stackoverflow.com/questions/10932249
复制相似问题