2011-06-08 69 views
2

我正在寻找在我的应用程序中使用SQLite扩展,除了SpatiaLite我找不到任何其他扩展正在使用的示例。以下岗位有一些建议,但没有使我更聪明:How to link a SQlite Extension Source File into Xcode for iPhone?在iPhone上使用的Xcode SQLite扩展

,我试图加载扩展名是:https://github.com/mateusza/SQLite-Levenshtein/blob/master/src/levenshtein.c

我编上面延伸,但我当然不能包括这在我的应用像用法:

SELECT load_extension('extension.sqlext'); 

有人能告诉我如何可以:

1)编译sqlite的,包括我的扩展。

2)使用sqlite_auto_extension包含我的扩展。

编辑:我有sqlite合并和上面的源文件现在包含在我的项目中,我只需要一个示例如何使用sqlite_auto_extension用于上述扩展,以及在哪里调用此。

回答

2

实际上,似乎你不能在iOS项目中使用动态库。 然而,在你的特定情况下,你可以获得该模块的源代码,将它们添加到项目中(仅有一个文件),并更改一些代码:int sqlite3_extension_init() 仅调用sqlite3_create_function(db,“levenshtein”,2 ,SQLITE_ANY,0,levenFunc,0,0); 在打开数据库之后进行调用。

+0

我以为我不能在我的项目中使用预编译的二进制文件?另外我得到这个:2011-06-08 18:20:10.434 SQL [2841:207] ***终止应用程序由于未捕获的异常'NSInternalInconsistencyException',原因:'创建详细视图语句时出错。 'no such function:load_extension''...这可能意味着我可能必须用load_extension函数编译sqlite – StuR 2011-06-08 18:54:05

+0

你总是可以从SQLite站点抓取一个源文件(它被称为sqlite合并,如果内存服务,其中所有的东西放在一个文件中),而不是从iOS SDK中使用一个。而且,为什么不在你的项目文件夹中编译库?应该没问题。 – 2011-06-08 19:01:19

+0

是的我试过了,我现在使用sqlite合并。虽然我现在没有得到一个错误,这是行不通的:NSString * levenshtein = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“levenshtein.sqlext”];你可以使用下面的代码来创建一个新的字符串:[*] [] [] [] [*] [*] - 当我编译我使用的扩展:gcc -m32 -bundle -fPIC -Isqlite3 -o levenshtein.sqlext levenshtein.c 这是iPhone的正确架构吗? – StuR 2011-06-08 19:44:02