Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

windows mingw环境下编译报错,'InitOnceExecuteOnce' was not declared in this scope #421

Closed
anheida opened this issue Aug 28, 2023 · 12 comments

Comments

@anheida
Copy link

anheida commented Aug 28, 2023

如图所示,编译动态库能编译通过,但是在自己程序中使用libhv时报错,hmutex.h里
'InitOnceExecuteOnce' was not declared in this scope
'InitializeSRWLock' was not declared in this scope
........
image
电脑环境WIN10,mingw,gcc version 7.3.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)
使用CMake -G "MinGW Makefiles" ../ 和cmake --build ./ 命令能够生产动态库
(自己希望的一套代码能够不修改可以在win和Linux下都能跑,现在只有win下报错,Linux下不报错)
新人一枚,恳请大佬能够协助解决一下,不胜感激。
image

编译编译静态库也是报同样的错误

@anheida anheida changed the title win下报错 win下链接报错,'InitOnceExecuteOnce' was not declared in this scope Aug 28, 2023
@hdcscy
Copy link

hdcscy commented Aug 29, 2023

恰巧路过,看了下你的报错,大概是宏展开问题。
在hmutex.h头文件:
#define hrwlock_init InitializeSRWLock
以上这一行,改成以下,重新编译试试。
#define hrwlock_init(prwlock) InitializeSRWLock(prwlock)

@ithewei
Copy link
Owner

ithewei commented Aug 29, 2023

Github Actions 里保证了windows msvc能编译通过,mingw如果有编译问题可以修了提PR

@ithewei ithewei changed the title win下链接报错,'InitOnceExecuteOnce' was not declared in this scope windows mingw环境下编译报错,'InitOnceExecuteOnce' was not declared in this scope Aug 29, 2023
@anheida
Copy link
Author

anheida commented Aug 29, 2023

修改了之后,尝试编译静态库,报错
hsocket.h:9:53: fatal error: afunix.h: No such file or directory
A0680273-C413-4845-9484-06C2A3694FF8
报错是找不到这个头文件,网上也没有找到合适的方法,请问这个怎么解决?

@ithewei
Copy link
Owner

ithewei commented Aug 29, 2023

修改了之后,尝试编译静态库,报错 hsocket.h:9:53: fatal error: afunix.h: No such file or directory A0680273-C413-4845-9484-06C2A3694FF8 报错是找不到这个头文件,网上也没有找到合适的方法,请问这个怎么解决?

如果你使用不到Unix Domain Socket功能或者环境里不支持,cmake时就不要勾选ENABLE_UDS

@anheida
Copy link
Author

anheida commented Aug 29, 2023

修改了之后,尝试编译静态库,报错 hsocket.h:9:53: fatal error: afunix.h: No such file or directory A0680273-C413-4845-9484-06C2A3694FF8 报错是找不到这个头文件,网上也没有找到合适的方法,请问这个怎么解决?

如果你使用不到Unix Domain Socket功能或者环境里不支持,cmake时就不要勾选ENABLE_UDS

cmake时取消ENABLE_UDS,
无论在hmutex.h头文件:
#define hrwlock_init InitializeSRWLock
以上这一行,改成以下,重新编译试试。
#define hrwlock_init(prwlock) InitializeSRWLock(prwlock)
是否修改,都会依旧报错:'InitOnceExecuteOnce' was not declared in this scope
'InitializeSRWLock' was not declared in this scope……
和刚开始的问题一样。群里的建议是在Win下不要用mingw,但是已经习惯了用mingw
请问这种有解决方法或者思路吗?在win10/win11中,使用mingw编译静态库。记得之前有个版本libhv可以编过,后来更新了最新代码之后win mingw就编不过了。

@hdcscy
Copy link

hdcscy commented Aug 29, 2023

hmutex.h这个头文件里用了宏_MSC_VER,不是区分的os,而是编译器。
在mingw的编译链环境下,照样是能用InitializeSRWLock的,但因为宏_MSC_VER的存在而不会预编译windows平台的代码,在vs上面才会生效。正确思路应该是把这部分问题解决。

至于编译问题,我昨天都编译了一份mingw版本的最新libhv,静态库lib,不影响。

@anheida
Copy link
Author

anheida commented Aug 29, 2023

hmutex.h这个头文件里用了宏_MSC_VER,不是区分的os,而是编译器。 在mingw的编译链环境下,照样是能用InitializeSRWLock的,但因为宏_MSC_VER的存在而不会预编译windows平台的代码,在vs上面才会生效。正确思路应该是把这部分问题解决。

至于编译问题,我昨天都编译了一份mingw版本的最新libhv,静态库lib,不影响。

大佬留个联系方式,帮我看一下我这一直编译不过,谢谢

@anheida
Copy link
Author

anheida commented Aug 29, 2023

hmutex.h这个头文件里用了宏_MSC_VER,不是区分的os,而是编译器。 在mingw的编译链环境下,照样是能用InitializeSRWLock的,但因为宏_MSC_VER的存在而不会预编译windows平台的代码,在vs上面才会生效。正确思路应该是把这部分问题解决。

至于编译问题,我昨天都编译了一份mingw版本的最新libhv,静态库lib,不影响。

我用的是Qt5.12里的mingw,动态库能编过但是链接时报错

@ithewei
Copy link
Owner

ithewei commented Aug 29, 2023

mingw下需要加预编译宏-D_WIN32_WINNT=0x0600 或者不要直接#include "hmutex.h"“hv.h”

@anheida
Copy link
Author

anheida commented Aug 29, 2023

mingw下需要加预编译宏-D_WIN32_WINNT=0x0600 或者不要直接#include "hmutex.h"“hv.h”

image
在libhv的CMakeList.txt里,判断当前操作系统是win32时,默认加的有预编译宏-D_WIN32_WINNT=0x0600 ,但是仍然依旧报错。
我用的是win10/win11 Qt5.12.2 自带的mingw编译时报错

@ithewei
Copy link
Owner

ithewei commented Aug 29, 2023

在你自己的工程里加-D_WIN32_WINNT=0x0600

@anheida
Copy link
Author

anheida commented Aug 30, 2023

感谢大家的帮助,在自己项目工程中添加-D_WIN32_WINNT=0x0600能够顺利编过。再次感谢作者的耐心帮助,问题关闭。

@anheida anheida closed this as completed Aug 30, 2023
ithewei added a commit that referenced this issue Aug 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants