【问题标题】:Linking to Sqlite in Xcode 7在 Xcode 7 中链接到 Sqlite
【发布时间】:2016-02-26 05:18:42
【问题描述】:

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

我按照这些步骤一直到“创建和准备 SQLite 应用程序项目”:

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

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

...但是libsqlite3.dylib不在列表中,所以我选择了libsqlite3.tbdlibsqlite3.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

【问题讨论】:

  • 未定义的符号“_OBJC_CLASS_$_FMDatabase”表示问题不是链接到 libsqlite,而是添加 FMDB 文件。您是否仔细检查了所有 .m 文件是否已打开“目标成员资格”复选框?

标签: xcode swift sqlite


【解决方案1】:

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

【讨论】:

  • 是否有特殊原因不链接到 .tbd 文件?到目前为止,我对此没有任何问题。从链接器输出可以看出,它有-lsqlite3
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 2017-01-31
  • 2016-04-03
  • 2020-01-01
  • 2015-08-24
  • 2013-06-07
  • 2013-09-29
  • 2013-09-30
相关资源
最近更新 更多