C 错误:定义‘;整数原子比较交换(参数1)和x2019;双重语言内置声明‘;布尔原子比较交换(params2)和x2019;

C 错误:定义‘;整数原子比较交换(参数1)和x2019;双重语言内置声明‘;布尔原子比较交换(params2)和x2019;,c,C,我试图在Ubuntu20.0.4LTS上构建Berkley Db 4.8.30 这就是我目前所做的: wget http://download.oracle.com/berkeley-db/db-4.8.30.zip unzip db-4.8.30.zip cd db-4.8.30 cd build_unix/ ../dist/configure --prefix=/usr/local --enable-cxx make make install 在编译过程中,我得到错误消息: 错误:“整数原

我试图在Ubuntu20.0.4LTS上构建Berkley Db 4.8.30

这就是我目前所做的:

wget http://download.oracle.com/berkeley-db/db-4.8.30.zip
unzip db-4.8.30.zip
cd db-4.8.30
cd build_unix/
../dist/configure --prefix=/usr/local --enable-cxx
make
make install
在编译过程中,我得到错误消息:

错误:“整数原子比较”交换(db原子t*)的定义, 原子值,原子值)'ambiguates内置声明'bool __原子比较交换(长无符号整数、易失性void*、void*、void*、int、int)

已为我的平台正确设置编译标志。以下是代码的相关部分:

原子.h(截断) 我想我需要设置一个pragma来忽略类型安全检查。。。但不太确定。如何解决此编译错误?

函数

bool __atomic_compare_exchange(long unsigned int, volatile void*, void*, void*, int, int)
int __atomic_compare_exchange(db_atomic_t*, atomic_value_t, atomic_value_t)
是用于原子操作的内置GCC编译器函数。有关详细信息,请参见此处:

功能

bool __atomic_compare_exchange(long unsigned int, volatile void*, void*, void*, int, int)
int __atomic_compare_exchange(db_atomic_t*, atomic_value_t, atomic_value_t)
似乎是Berkley Db 4.8.30的一个功能,这会产生冲突。两个函数不能具有相同的名称

以下链接是指向可以应用以解决问题的修补程序(包括修补程序说明)的链接:

最好将此信息发布到您尝试构建的产品的支持渠道。编辑编译器的头绝对不是正确的方法。看起来伯克利DB的作者不明智地选择了定义一个名为
\uuu
的函数,它是一个保留标识符。同时,GCC有权这样做,决定用相同的名称定义一个不同且不兼容的函数。我认为您要么必须重命名所有实例,要么将其移植到GCC的函数中。正如在问题的注释中所指出的,这是Berkely DB的问题:@AndrewHenle我知道,否则为什么我会发布一个到Berkley DB的补丁的链接来解决这个问题?