我正在编写一个使用 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/