如何在使用mingw從Linux到Windows交叉編譯時處理字符編碼/轉換問題?從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
我能夠通過在代碼LPSTR
更換wchar_t*
解決此單個錯誤破解,但當時我只是跑成另一個錯誤。似乎很明顯,我現在正面臨一個字符編碼問題。我在想象,可能有一些編譯器選項可以正確處理轉換(我正在尋找fexec-charset
),但我甚至不確定這個問題。據我所知,LPSTR
之類是微軟的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
的宏。
兩者都有效,但我最終將其設置爲配置選項。現在我還有其他一些錯誤,但這個似乎已經解決了。謝謝。 –
@Ilian Pinzon嗨,你能告訴我把'#define UNICODE'放在哪裏嗎?我正在編譯窗口上的(源Qt5.2.1)。我得到了同樣的錯誤 'project.cpp:在成員函數'QStringList&QMakeProject :: values(const QString&,QMap&)':' –
user628298