在Xcode 7中链接到Sqlite

时间:2016-02-26 05:18:43

标签: xcode swift sqlite

我在这里遵循本教程:http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_8_Application_using_Swift_and_FMDB - 不幸的是,它是为Xcode 6编写的,而不是7。

我按照这些步骤进行了#34;创建和准备SQLite应用程序项目":

  

创建项目后,下一步是将项目配置为在构建过程的链接阶段包含SQLite动态库(libsqlite3.dylib)。如果不包含此库将导致生成错误。

     

要添加此库,请在Xcode项目导航器(带有产品名称的顶部条目)中选择目标条目,以显示“常规信息”面板。选择“构建阶段”选项卡以显示构建信息。 Link Binary with Libraries部分列出了项目中已包含的库和框架。要添加其他库或框架,请单击“+”按钮以显示完整列表。从此列表中搜索,然后选择libsqlite3.dylib并单击Add。

...但libsqlite3.dylib不在列表中,因此我选择libsqlite3.tbd代替(libsqlite3.0.tbd也列出了,但我没有选择它。)

然而,当我构建项目时,我得到了这个输出:

 Undefined symbols for architecture i386:
   "_OBJC_CLASS_$_FMDatabase", referenced from:
       type metadata accessor for __ObjC.FMDatabase in Database.o
 ld: symbol(s) not found for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我发现这个QA并没有多大帮助(Undefined symbols for architecture i386 using libsqlite3.dylib with FMDB Xcode 7 ios9)因为提供的解决方案要么添加libsqlite3.dylib(我不存在,我在我的文件系统中搜索),或添加我已经完成的libsqlite3.tbd的引用。

这是我的链接器命令(为便于阅读而格式化):

Ld build/Debug-iphonesimulator/MyApp.app/MyApp normal i386
cd "/Users/me/src-me/MyApp"
export IPHONEOS_DEPLOYMENT_TARGET=9.2
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-arch i386
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.2.sdk
-L/Users/(me)/src-me/MyApp/build/Debug-iphonesimulator
-F/Users/(me)/src-me/MyApp/build/Debug-iphonesimulator
 -filelist /Users/(me)/src-me/MyApp/build/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386/MyApp.LinkFileList
 -Xlinker
 -rpath
 -Xlinker @executable_path/Frameworks
 -mios-simulator-version-min=9.2
 -Xlinker
 -objc_abi_version
 -Xlinker 2 -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator
 -Xlinker
 -add_ast_path
 -Xlinker /Users/(me)/src-me/MyApp/build/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386/MyApp.swiftmodule
 -lsqlite3
 -framework ExternalAccessory
 -Xlinker
 -dependency_info
 -Xlinker /Users/(me)/src-me/MyApp/build/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386/MyApp_dependency_info.dat
 -o /Users/(me)/src-me/MyApp/build/Debug-iphonesimulator/MyApp.app/MyApp

1 个答案:

答案 0 :(得分:0)

不要链接到 .tbd 文件。只需将-lsqlite3添加到Other Linker Flags构建设置即可。