使用xcode构建Sqlite ICU

时间:2014-11-26 12:09:14

标签: ios iphone sqlite xcode6 icu

如何在我的iPhone应用程序工作区中将ICU(International Components for Unicode)编译为sqlite?

之前我编译了sqlite合并,但是我不确定我应该下载哪些文件,以及需要将哪些脚本添加到xcode中 - 当然我不是第一个需要这样的文件。

理想情况下,我正在寻找分步说明。

2 个答案:

答案 0 :(得分:1)

这是一个相当老的问题,但是b / c我花了很多时间自己构建ICU版本,我想分享自己的经验。基本上,我提出了问题,并从https://www.mail-archive.com/sqlite-users@mailinglists.sqlite.org/msg112029.html

的sqlite邮件列表中获得了帮助。

因此,首先使用brew安装icu4c,但是有一个陷阱,b / c brew拒绝链接icu4c。所以我需要在路径中添加icu4c

import pymysql

def conn():
    mydb=pymysql.Connect('localhost','root','password','demo_db',autocommit=True)
    return mydb.cursor()

def db_exe(query,c):
    try:
        if c.connection:
            print("connection exists")
            c.execute(query)
            return c.fetchall()
        else:
            print("trying to reconnect")
            c=conn()
    except Exception as e:
        return str(e)

dbc=conn()
print(db_exe("select * from users",dbc))

第二,从https://www.sqlite.org/download.html下载qiulangs-MacBook-Pro:fts qiulang$ brew info icu4c icu4c: stable 62.1 (bottled) [keg-only] C/C++ and Java libraries for Unicode and globalization http://site.icu-project.org/ /usr/local/Cellar/icu4c/62.1 (250 files, 67.3MB) Poured from bottle on 2018-07-05 at 15:12:09 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/icu4c.rb ==> Caveats icu4c is keg-only, which means it was not symlinked into /usr/local, because macOS provides libicucore.dylib (but nothing else). If you need to have icu4c first in your PATH run: echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile For compilers to find icu4c you may need to set: export LDFLAGS="-L/usr/local/opt/icu4c/lib" export CPPFLAGS="-I/usr/local/opt/icu4c/include" tar。 然后像这样运行configure,(如果您的configure输出的第一行是sqlite-autoconf,请检查为什么icu4c不在您的路径中。)

bash: icu-config: command not found

我没有按照brew的建议设置./configure CFLAGS="-DSQLITE_ENABLE_ICU `icu-config --cppflags`" LDFLAGS="`icu-config --ldflags`" ,但是我仍然使用输出LDFLAGS & CPPFLAGS成功运行configure,然后运行make来构建ICU版本。我相信之后,您要仔细检查它是否有效。这是我使用的示例代码:

creating Makefile

fts5似乎还不支持ICU令牌生成器,因此我只能使用fts3或fts4。

sqlite> CREATE VIRTUAL TABLE zh_text USING fts4(text, tokenize=icu zh_CN);
sqlite> INSERT INTO zh_text values('为什么不支持中文 Can icu support Chinese');
sqlite> CREATE VIRTUAL TABLE zh_terms USING fts4aux(zh_text);
sqlite> SELECT term, col, documents FROM zh_terms;
can|*|1
can|0|1
chinese|*|1
chinese|0|1
icu|*|1
icu|0|1
support|*|1
support|0|1
不|*|1
不|0|1
中文|*|1
中文|0|1
为什么|*|1
为什么|0|1
支持|*|1
支持|0|1
sqlite> CREATE VIRTUAL TABLE icu_zh_cn USING fts3tokenize(icu, zh_CN);
sqlite> SELECT token, start, end, position FROM icu_zh_cn WHERE INPUT='为什么不支持中文 fts5 does not seem to work for chinese';
为什么|0|9|0
不|9|12|1
支持|12|18|2
中文|18|24|3
fts5|25|29|4
does|30|34|5
not|35|38|6
seem|39|43|7
to|44|46|8
work|47|51|9
for|52|55|10
chinese|56|63|11

答案 1 :(得分:-1)

我在Linux(GCC编译器)上使用来自此处的ICU源代码来完成此操作:http://site.icu-project.org/download/52。所有cpp和c文件都已添加到项目中。 SQLite 3.8.4.1合并也在该项目中。诀窍是定义:

ICU需要: U_COMMON_IMPLEMENTATION U_STATIC_IMPLEMENTATION U_I18N_IMPLEMENTATION HAVE_CONFIG_H HAVE_INTTYPES_H

SQLite需要: SQLITE_OMIT_LOAD_EXTENSION

这不是最简单的事情,但比旧版ICU容易得多。

当然,Linux不是iPhone,但这可能会有所帮助。