我正在编写一个使用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
不应该照顾它吗?
提前致谢!
答案 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。