我正在尝试使用C++中的SCHED_DEADLINE,我需要发送struct sched_attr
to和ioctl
,因此我包含了
,该头还包含了strutsched_param
。 我还包括
,它包括C++的标准头,最终包括include\bits\sched.h
,它还定义了structsched_param
。 编译器(显然)并不特别喜欢这样。 我在代码中使用了头保护(_bits_types_struct_sched_param
)来使编译器不包含include\bits\sched.h
,但感觉应该有一个“更好”的方法。
> Executing task in folder sched_deadline_testing: arm-linux-gnueabihf-g++ -o LSM9DS0 src/LSM9DS0.cpp -Wall --pedantic <
In file included from src/LSM9DS0.cpp:36:
/usr/arm-linux-gnueabihf/include/linux/sched/types.h:7:8: error: redefinition of ‘struct sched_param’
struct sched_param {
^~~~~~~~~~~
In file included from /usr/arm-linux-gnueabihf/include/bits/sched.h:74,
from /usr/arm-linux-gnueabihf/include/sched.h:43,
from /usr/arm-linux-gnueabihf/include/pthread.h:23,
from /usr/arm-linux-gnueabihf/include/c++/8/arm-linux-gnueabihf/bits/gthr-default.h:35,
from /usr/arm-linux-gnueabihf/include/c++/8/arm-linux-gnueabihf/bits/gthr.h:148,
from /usr/arm-linux-gnueabihf/include/c++/8/ext/atomicity.h:35,
from /usr/arm-linux-gnueabihf/include/c++/8/bits/basic_string.h:39,
from /usr/arm-linux-gnueabihf/include/c++/8/string:52,
from src/LSM9DS0.cpp:20:
/usr/arm-linux-gnueabihf/include/bits/types/struct_sched_param.h:23:8: note: previous definition of ‘struct sched_param’
struct sched_param
如果重要的话,密码就在这里。 我也尝试过这种交叉编译,和本地编译,都造成了这个问题。
你运气不好。 这两个标头不兼容。 您必须避免将
和
同时包含在同一个翻译单元中。 可能值得注意的是,作为Linux内核头,前者可能不打算在C++中使用,也没有尝试使其兼容。