gpt4 book ai didi

gcc - #include 导致多个定义冲突

转载 作者:行者123 更新时间:2023-12-02 11:46:18 25 4
gpt4 key购买 nike

这是要重现的最小 C 程序:

#include <alsa/asoundlib.h>
#include <sys/time.h>

int main( void )
{
}

这将使用 gcc -c -o timealsa.o timealsa.c 进行编译,但如果包含 -std=c99 开关,则会出现重新定义错误:

In file included from /usr/include/sys/time.h:28:0,
from timealsa.c:3:
/usr/include/bits/time.h:30:8: error: redefinition of ‘struct timeval’
struct timeval
^
In file included from /usr/include/alsa/asoundlib.h:49:0,
from timealsa.c:2:
/usr/include/alsa/global.h:138:8: note: originally defined here
struct timeval {
^

如何在仍使用 -std=c99 的情况下解决此冲突?

最佳答案

由于您的问题表明您正在使用 GLIBC 的 time.h,因此有一种方法可以通过告诉它不要定义 timeval 来避免这种情况。首先包含 asoundlib.h,然后定义 _STRUCT_TIMEVAL。将使用 asoundlib.h 中定义的那个。

#include <alsa/asoundlib.h>
#ifndef _STRUCT_TIMEVAL
# define _STRUCT_TIMEVAL
#endif
#include <sys/time.h>

int main( void )
{
}

关于gcc - #include <alsa/asoundlib.h> 和 <sys/time.h> 导致多个定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com