【发布时间】: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.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
【问题讨论】:
-
未定义的符号“_OBJC_CLASS_$_FMDatabase”表示问题不是链接到 libsqlite,而是添加 FMDB 文件。您是否仔细检查了所有 .m 文件是否已打开“目标成员资格”复选框?