使用冲突类型编译C代码

时间:2009-09-28 10:55:10

标签: 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

不应该照顾它吗?

提前致谢!

4 个答案:

答案 0 :(得分:2)

这样的东西?

#define uuid_t unistd_uuid_t
#include <unistd.h>
#undef uuid_t
#include <ossp/uuid.h> /* or whatever header you're including */

这很难看,但是,它是C ......

答案 1 :(得分:2)

你应该在94行检查/opt/local/include/ossp/uuid.h,并希望有一个uuid_t的定义。希望你能找到类似的东西:

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

如果编写该标题的人以这种方式做到了,那么你可以修改你的代码:

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

这样,他第二次#include就不会在ossp / uuid.h中点击uuid_t的声明。

答案 2 :(得分:1)

如果您可以访问ossp-uuid库源代码,那么您可以使用简单的文本搜索和替换将违规标识符重命名为ossp_uuid_t。重新编译并重新安装库,一切都应该没问题。

答案 3 :(得分:0)

这可能比你需要的更复杂,但是一个选择是将ossp-uuid包装在共享库中,并创建一个不暴露底层uuid_t类型的API。