编译具有冲突类型的 C 代码

标签 c gcc

我正在编写一个使用 ossp-uuid 的程序它定义了一个名为 uuid_t 的类型。现在,我遇到的问题是该类型已在 Mac OSX 中的文件 unistd.h 中定义。

所以,我得到的错误是:

/opt/local/include/ossp/uuid.h:94: error: conflicting types for 'uuid_t'
/usr/include/unistd.h:133: error: previous declaration of 'uuid_t' was here

我编译我的程序:

gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" - 
DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" 
-DPACKAGE=\"epride\" -DVERSION=\"0.2\" -I.    -I/usr/local/BerkeleyDB.4.7/include 
-I/opt/local/include -I/opt/local/include/db47 -I/opt/local/include/libxml2 
`pkg-config --cflags glib-2.0` -DNUM_REPLICAS=1 -DGEN_SIZE=10 -g -O2 -MT 
libepride_a-conflictset.o -MD -MP -MF .deps/libepride_a-conflictset.Tpo
-c -o libepride_a-conflictset.o `test -f 'conflictset.c' 
|| echo './'`conflictset.c

有没有办法告诉 gcc 他应该忽略 unistd.h 中的类型?因为我将 unistd.h 用于其他用途。

在uuid.h中有这些行:

/* workaround conflicts with system headers */
#define uuid_t       __vendor_uuid_t
#define uuid_create  __vendor_uuid_create
#define uuid_compare __vendor_uuid_compare
#include <sys/types.h>
#include <unistd.h>
#undef  uuid_t
#undef  uuid_create
#undef  uuid_compare

这不应该解决吗?

提前致谢!

最佳答案

您应该检查/opt/local/include/ossp/uuid.h 第 94 行,并希望有 uuid_t 的定义。希望您会发现类似的内容:

#ifndef UUID_T_DEFINED
#define UUID_T_DEFINED
typedef uuid_t .... whatever
#endif

如果编写该 header 的人是这样做的,那么您可以修改您的代码:

#include <unistd.h>
#define UUID_T_DEFINED
#include <ossp/uuid.h>

这样,第二个#include就不会命中ossp/uuid.h中uuid_t的声明。

关于编译具有冲突类型的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486444/

相关文章:

c - 一个 strcpy gcc 内联汇编代码

c++ - 在 gcc 中使用 O2 时如何将此 vector 优化快 10 倍?

c++ - 输入流失败后对输入变量的影响

c++ - 在一个进程中运行多个程序?

c - 隐式释放

java - 将 java 变量数据映射到 C 结构并编写一个 c 兼容文件

c++ - -DXXX 编译器参数的 CMAKE 选项

c - C 函数原型(prototype)返回二维数组

c++ - 从 DWORD 中提取 lo 和 hi 字时为什么需要二进制移位?

c - gcc编译器优化影响浮点比较的结果