>On Fri, Jan 12, 2024 at 03:40:59PM +0800, Hu Yadi wrote: >> One build issue comes up due to both mount.h included dev_in_maps.c >> >> In file included from dev_in_maps.c:10: >> /usr/include/sys/mount.h:35:3: error: expected identifier before numeric constant >> 35 | MS_RDONLY = 1, /* Mount read-only. */ >> | ^~~~~~~~~ >> In file included from dev_in_maps.c:13: >> >> Remove one of them to solve conflict, another error comes up: >> >> dev_in_maps.c:170:6: error: implicit declaration of function ‘mount’ [-Werror=implicit-function-declaration] >> 170 | if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) == -1) { >> | ^~~~~ >> cc1: all warnings being treated as errors >> >> and then , add sys_mount definition to solve it After both above, >> dev_in_maps.c can be built correctly on my mache(gcc >> 10.2,glibc-2.32,kernel-5.10) > >This is apparently the same error as in >https://lore.kernel.org/all/11cdac1e-e96c-405f-63e8-35b0e2926337@xxxxxxx/ > >I'm getting the impression that we are fixing the issue at the wrong layer here? >After all, the mount() syscall is supposed to be used with <sys/mount.h> according to the mount(2) man page? It feels a bit like cheating to resort to >sys_mount() instead...? Headers conflict is known issue due to https://sourceware.org/glibc/wiki/Synchronizing_Headers <linux/mount.h> and <sys/mount.h> (Note: no workaround) So, it is incorrect to use both them. > >Do you have any deeper thoughts on what could be the underlying issue here? >With my newer GCC toolchains, I have been unable to reproduce this. > gcc version 10.2.1 20200825 (Alibaba 10.2.1-3.5 2.32) (GCC) ldd (GNU libc) 2.32 kernel 5.10.134-16.1.al8.x86_64 "Alibaba Cloud Linux 3(the most biggest public cloud provider's OS) >Thanks,