VS2019 SSH远程编译树莓派paho项目报struct sigaction不完整错误
错误根因分析
Error invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’
Error storage size of ‘sa’ isn’t known
上述报错是VS2019跨平台SSH编译Linux程序时的典型配置问题,和树莓派本地环境无关,核心原因有两个:
- 预处理器宏配置缺失:
struct sigaction属于POSIX标准扩展定义的结构体,默认情况下C标准库的signal.h不会暴露该结构体的完整定义,需要显式开启POSIX特性相关的宏。树莓派本地的cc(gcc)默认会开启对应POSIX宏,所以本地编译无报错,而VS2019的跨平台编译配置默认没有添加这些宏。 - 头文件搜索路径优先级错误:VS2019可能错误索引了本地Windows的头文件,而非树莓派远程环境的标准头文件,导致读取的
signal.h没有对应结构体定义。
修复步骤
- 第一步:添加POSIX特性宏:打开VS项目属性,进入「C/C++ -> 预处理器 -> 预处理器定义」,添加以下两个宏:
_POSIX_C_SOURCE=200809L __USE_POSIX=1 - 第二步:调整远程头文件优先级:进入项目属性「C/C++ -> 常规 -> 附加包含目录」,按顺序添加树莓派远程的头文件路径:
32位树莓派:
64位树莓派:/usr/include /usr/include/arm-linux-gnueabihf/usr/include /usr/include/aarch64-linux-gnu - 第三步:确认工具集配置正确:进入项目属性「配置属性 -> 常规 -> 平台工具集」,确认选择
GCC for Remote Linux,而非Windows平台的MSVC工具集。
修改完成后重新编译即可解决问题。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

