C++ 带-municode的MinGW w64要求在函数名的末尾添加“W”

C++ 带-municode的MinGW w64要求在函数名的末尾添加“W”,c++,qt,gcc,unicode,mingw-w64,C++,Qt,Gcc,Unicode,Mingw W64,我正在使用Qt构建一个跨平台的应用程序。在Linux上开发,但希望使用MinGW-w64在Windows上构建。但发生了以下编译错误: 例如,我有一个名为func的函数。如果采用qmake提供的默认编译选项-municode,gcc表示未定义对funcW的引用。如果手动删除此选项,gcc将显示对funcA的未定义引用 此错误只发生在一个函数中,其他函数都可以。这对我来说很奇怪 代码可以在Linux上成功构建和编译 知道它是如何发生的,以及如何修复它吗?许多Windows函数都是宏,可以根据是否定

我正在使用Qt构建一个跨平台的应用程序。在Linux上开发,但希望使用MinGW-w64在Windows上构建。但发生了以下编译错误:

例如,我有一个名为func的函数。如果采用qmake提供的默认编译选项-municode,gcc表示未定义对funcW的引用。如果手动删除此选项,gcc将显示对funcA的未定义引用

此错误只发生在一个函数中,其他函数都可以。这对我来说很奇怪

代码可以在Linux上成功构建和编译


知道它是如何发生的,以及如何修复它吗?

许多Windows函数都是宏,可以根据是否定义了UNICODE扩展到FuncA或FuncW。Func只是一个宏。@chris,所以我只是用ifdef UNICODE包装函数声明?如果我理解正确,并且Func是您的函数,我不知道为什么要转换它。绝对不足以给出规范的解决方案。函数的实际名称是什么?你的图书馆有哪些?这是编译错误还是链接错误?听起来像是链接错误,这意味着您没有链接到正确的库。如果是您编写的函数,则听起来您与同名的Windows API函数之一存在冲突。您的选项是更改名称或取消定义正在更改名称的宏,或者直接更改名称,或者通过排除定义宏和宏的windows标题部分来取消定义宏。@chris是的,您的理解是正确的。奇怪的是只有一个函数有这个问题。其他的可以编辑。我目前使用的是ifdef UNICODE define func funcW else define func funcA endif,它暂时解决了这个问题。