2012-02-29 58 views
8

我在尝试使用FMDatabase时遇到了问题。尝试使用SQLite包装器时出错FMDatabase

我已经加入theese文件:

FMDatabaseQueue 
FMDatabaseAdditions 
FMDatabase 
FMResultSet 
FMDatabasePool 

..和我还添加了libsqlite3.dylib库和进口FMDatabase.h,但只要我去掉这一行:

FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; 

..我得到这个错误:

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_FMDatabase", referenced from: 
     objc-class-ref in DBWrapper.o 
ld: symbol(s) not found for architecture i386 

我也试图改变像4.0之间部署目标设置 - 5.0和创建一个新的,干净的项目等。

我正在使用Xcode版本4.3(4E109)。

我在做什么错? :)

// Stefan

+1

您是否将.h和.m文件添加到您的项目中? – lawicko 2012-02-29 16:55:52

+1

是的,我已经添加了src除fmdb.m以外的所有文件。 – 2012-03-01 07:31:31

回答

16

这是一个链接错误,意义,一切你是否厌倦了编译器是好的,但一旦到了要一起包中的所有编译对象代码转换成可执行的,它无法找到该被引用的类的实现在代码中。

将.m文件拖到Xcode中的项目源列表中应该自动将它们添加到“构建阶段”,但是如果你这样做了,并且出现此错误,请检查它们是否在该处:单击顶部在左侧源列表中获取项目设置,单击下一个窗格中的目标,单击下一个窗格中的“Build Phases”列标题,然后展开“编译源”行。如果FM文件不在那里,请点击列表底部的+按钮并选择它们。

+0

你说得对,这解决了我的问题。谢谢! – 2012-03-01 07:39:38

+3

这是Xcode 4.3 btw中的一个错误,它会在添加文件时取消选中“添加到目标”复选框。 – valexa 2012-03-01 10:50:25

+0

继续摇滚,Xcode ..感谢您的注意 - 我一定要留意文件退出构建阶段。 – davehayden 2012-03-01 22:15:28

1

您是否在您使用它们的地方导入了FMDB标题?

#import "FMDatabase.h" 
+0

是的。我可以像这样定义我的数据库变量:FMDatabase * db;它的工作原理。它取消注释后立即崩溃[FMDatabase databaseWithPath:@“/ tmp/tmp.db”] ;. – 2012-03-01 07:33:10

2

扩展在davehayden的答案...

如果添加的头文件和源文件到Xcode的一个文件夹中,.m文件不被添加到编译源代码列表。我通常会被抓到,因为我想在我的项目文件夹中保留一个合理的文件夹结构。为了解决这个问题,我手动将文件复制到我想要的项目文件夹中。然后在Xcode中,将每个单独的头文件和源文件添加到我的项目中而不进行复制(使用文件>添加文件到...)。在Project Navigator中选择所有松散的文件,右键单击,然后选择一个文件夹。

有点晚了,但我希望这可以帮助别人。