Xcode(LLVM)和SQLite:错误:类型'struct Btree'的不完整定义

时间:2012-11-10 23:20:34

标签: xcode sqlite llvm

我对这个感到困惑.... SQLite是一个独立的项目,也是Workspace的一部分。构建目标时,LLVM抱怨:

<path>/sqlite3.c:44924:24: Incomplete definition of type 'struct Btree'

这是在44924行(以及44924之后的其他14个地方)。这是我看到的其他内容:

7145: /* Forward declaration */
7146: typedef struct Btree Btree;
...

11378: struct Btree {
11379:   sqlite3 *db;       /* The database connection holding this btree */
11380:   BtShared *pBt;     /* Sharable content of this btree */
11381:  u8 inTrans;        /* TRANS_NONE, TRANS_READ or TRANS_WRITE */
11382:  u8 sharable;       /* True if we can share pBt with another db */
11383:  u8 locked;         /* True if db currently has pBt locked */
11384:  int wantToLock;    /* Number of nested calls to sqlite3BtreeEnter() */
11385:  int nBackup;       /* Number of backup operations reading this btree */
11386:  Btree *pNext;      /* List of other sharable Btrees from the same db */
11387:  Btree *pPrev;      /* Back pointer of the same list */
11388:#ifndef SQLITE_OMIT_SHARED_CACHE
11389:  BtLock lock;       /* Object used to lock page 1 */
11390:#endif
11391:};
...

44919: static void lockBtreeMutex(Btree *p){
44920:   assert( p->locked==0 );
44921:   assert( sqlite3_mutex_notheld(p->pBt->mutex) );
44922:   assert( sqlite3_mutex_held(p->db->mutex) );
44923: 
44924:   sqlite3_mutex_enter(p->pBt->mutex);
44925:   p->pBt->db = p->db;
44926:   p->locked = 1;
44927: }

我还尝试将结构在11378重命名为struct Btree_S(并更改了typedef)。同样的问题。

我想我的问题是,它怎么可能不完整?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

确保sqlite3.c编译为C,而不是C ++。

答案 1 :(得分:0)

找到答案....未定义预处理器宏SQLITE_HAS_CODEC=1。为什么没有定义?因为Xcode 4: Project does not honor $(inherited) Build Setting in Workspace?

$(inherited)在父代/子关系中的项目中无法按预期在Xcode 4中工作(尽管IDE的树视图显示了我们),以及文档对$(inherited)的含义。

Xcode配置文件(xcconfig)也无法按预期工作。我无法将配置文件分配给其他子项目(仅限顶级项目)。

Apple应该解雇他们的整个QA部门和技术作家,并雇用一批新的ID10T。