Android開發中,
遇到以下兩個問題:
error: redefinition of ‘hashtable_iterator_key’
error: redefinition of ‘hashtable_iterator_value’
這是由於gcc 5.1 對於編譯C文件已由gnu89改為gnu11,
這改變了對extern inline的定義,
在mkfs.ubifs中,
這導致了hashtable_iterator_key 與 hashtable_iterator_value 產生多重定義,(redefine),
最快速的解決方法是以extern inline 取代 static inline.
也就是在hashtable_itr.c 與 hashtable_itr.h 中
改為下列所示:
diff --git a/mkfs.ubifs/hashtable/hashtable_itr.c b/mkfs.ubifs/hashtable/hashtable_itr.c index 24f4dde..d102453 100644 --- a/mkfs.ubifs/hashtable/hashtable_itr.c +++ b/mkfs.ubifs/hashtable/hashtable_itr.c @@ -35,18 +35,6 @@ hashtable_iterator(struct hashtable *h) } /*****************************************************************************/ -/* key - return the key of the (key,value) pair at the current position */ -/* value - return the value of the (key,value) pair at the current position */ - -void * -hashtable_iterator_key(struct hashtable_itr *i) -{ return i->e->k; } - -void * -hashtable_iterator_value(struct hashtable_itr *i) -{ return i->e->v; } - -/*****************************************************************************/ /* advance - advance the iterator to the next element * returns zero if advanced to end of table */ diff --git a/mkfs.ubifs/hashtable/hashtable_itr.h b/mkfs.ubifs/hashtable/hashtable_itr.h index 87a97eb..5c94a04 100644 --- a/mkfs.ubifs/hashtable/hashtable_itr.h +++ b/mkfs.ubifs/hashtable/hashtable_itr.h @@ -28,7 +28,7 @@ hashtable_iterator(struct hashtable *h); /* hashtable_iterator_key * - return the value of the (key,value) pair at the current position */ -extern inline void * +static inline void * hashtable_iterator_key(struct hashtable_itr *i) { return i->e->k; @@ -37,7 +37,7 @@ hashtable_iterator_key(struct hashtable_itr *i) /*****************************************************************************/ /* value - return the value of the (key,value) pair at the current position */ -extern inline void * +static inline void * hashtable_iterator_value(struct hashtable_itr *i) { return i->e->v;
}
沒有留言:
張貼留言