0

尝试借助 Visual Studio 2019 在我通过 ssh 连接的 Raspberry Pi 机器上构建 paho_c_pub.c。<signal.h> 中的代码使用structure sigaction编译器不可见:

Error       invalid application of ‘sizeof’ to incomplete type ‘struct sigaction’
Error       storage size of ‘sa’ isn’t known

在控制台中构建代码时没有这样的错误:

cc paho_c_sub.c pubsub_opts.c -o paho_c_sub -l paho-mqtt3as

Visual Studio C 项目配置有什么问题?

4

1 回答 1

0

你的代码需要有

#define  _POSIX_C_SOURCE  200809L

之前

#include <signal.h>

man 3 sigaction中所述,在概要的 glibc 部分的功能测试宏要求中。

无论何时编译代码,都应该启用警告 ( -Wall)。

如果没有上述定义,sigaction()函数就不会公开,并且您的编译器使用标准 C 规则来确定传递给它的确切内容。它恰好可以工作,因为它需要一个 int 和两个指针作为参数;但是当启用警告时(尤其是当警告被视为错误时,如在 Visual Studio 2019 环境中),编译器会指出这个问题。添加#define应该使两者都能正常工作,而无需依赖偶然性。

于 2021-11-16T18:05:35.673 回答