使用MSYS2/MING64编译Linux移植程序时sighandler_t类型未定义求助
解决MSYS2/MinGW下sighandler_t未定义的问题
一、无需额外安装MSYS2包
MinGW的signal.h和Linux版本差异是设计使然,并非缺少特定包导致的未定义问题,不用额外安装组件。
二、两种可行的解决方式
方法1:手动定义sighandler_t类型
在引用<signal.h>的代码前(或者项目的公共头文件中)添加如下定义,和Linux系统的signal.h中该类型的本质保持一致:
#ifndef sighandler_t #define sighandler_t void (*)(int) #endif
方法2:通过编译宏自动启用定义
MinGW的signal.h包含条件编译逻辑,只要在编译时启用_GNU_SOURCE宏,就能自动生成sighandler_t的定义。
- 如果用Makefile编译,在CFLAGS中添加宏定义:
CFLAGS += -D_GNU_SOURCE - 如果直接在代码中设置,要在包含
<signal.h>之前定义宏:#define _GNU_SOURCE #include <signal.h>
三、额外提示
开启_GNU_SOURCE宏不仅能解决这个问题,还能让MinGW暴露更多兼容Linux的POSIX接口,对编译其他Linux移植过来的代码也有帮助。
内容的提问来源于stack exchange,提问作者nutella ction
相关产品推荐
相关产品推荐

