正如我在上面的评论中提到的那样,我得到了这个工作,因为 Stack Overflow 真的帮助了我,我想贡献一点来回馈社区。
免责声明
这来自一个 .NET 开发人员,他在 iOS/MacOS/XCode/Monotouch 方面是 N00B。
虽然我在 iPad 模拟器上对此进行了测试,但我还没有在实际设备上对其进行测试。
结束免责声明
这是一个快速编译您自己的 SQLite 版本并将其包含在您的 Monotouch 项目中的快速方法,以支持全文搜索。
第 1 步:下载 SQLite 合并文件。
这包括一个文件中的所有 SQLite。
http://www.sqlite.org/download.html
第 2 步:在 Xcode for iOS 中编译 SQLite 源代码。
这里有一个关于如何做到这一点的很好的演练:http:
//pp.hillrippers.ch/blog/2009/08/08/Static+SQLite+Library+with+Unicode+Support+for+the+iPhone/
我按照步骤 1-5,跳过了 #6,因为我们没有添加额外的标题。
我没有使用演练中使用的编译标志:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS4
您可能还想添加其他人。
这些编译标志在 XCode 中添加到项目的“预处理器宏”下的“构建”选项卡中。
一旦你编译了这个,你应该有“mylibrary.a”。
第 3 步:将此文件包含在您的 MonoDevelop 项目中
将 mylibrary.a 与任何其他文件一样添加到 MonoDevelop 中,右键单击它并确保构建操作为“Nothing”。
在您的项目选项中选择“iPhone Build”。您需要添加额外的 mtouch 参数。添加以下内容
-gcc_flags "-L${ProjectDir} -lmylibrary -force_load ${ProjectDir}/mylibrary.a"
第 4 步:构建 ac# 包装器
此时您可能会找到一个很好的包装器来包含,但我很快就推出了自己的包装器。
有关在 C# 中编写 SQLite 包装器的好教程,请查看此页面:
http ://www.switchonthecode.com/tutorials/csharp-tutorial-writing-a-dotnet-wrapper-for-sqlite
因为您的库是项目的一部分,所以您不需要按名称引用库,而是使用“__Internal”关键字。*注意“__INTERNAL”中有两个下划线 *(不要问我在意识到这一点之前浪费了多少时间)
这是我的一个样本
[DllImport ("__Internal", EntryPoint="sqlite3_open")]
static extern int sqlite3_open_v2(string filename, out IntPtr db);
显然,要组装一个包装器还有很多工作要做,但是那里有很多关于如何做到这一点的信息。一个问题是正确编组从 SQLite 返回的字符串。(有关编组的更多信息,请参见http://blog.gebhardtcomputing.com/2007/11/marshal-utf8-strings-in-net.html )
这是一个关于将本机库编译到 MonoDevelop/monotouch 中的快速演练,我希望它对某人有所帮助。