6

我想编译静态链接到icu的icu sqlite 扩展

这是我尝试过的,也许这个错误对你来说很明显。

> cd ICU/来源
> ./runConfigureIcu Linux --enable-static --with-packaging-format=archive
...
> 制作

> cd ../../icu-sqlite
> gcc -o libSqliteIcu.so -shared icu.c -I../icu/source/common
      -I../icu/source/i18n -L ../icu/source/lib -lsicuuc -lsicui18n -lsicudata
...
> sqlite3
> .load "libSqliteIcu.so"
未定义符号 utf8_countTrailBytes

文件

icu sqlite 扩展

从 sqlite.org 下载 icu.c

重症监护室 4.2.1

从 icu-project.org 下载 ICU4C

我的要求

  • 在 Linux 和 Windows 上运行
  • 我只需要分发一个文件:libSqliteIcu.so.

知道我还能尝试什么吗?

文档

4

2 回答 2

3

这个命令行在 Linux 上为我工作:

g++ -shared --language c  -o libSqliteIcu.so icu.c  -I../icu/source/common -I../icu/source/i18n -lpthread -lm   -L../icu/source/lib -lsicui18n -lsicuuc -lsicudata  -lpthread -lm 

注意库文件的顺序,以及使用 g++ 来确保引用 c++ 运行时,即使我们正在编译 C 文件。

注意。我使用了icu-config --prefix=../icu/source --ldflags.

于 2009-12-05T22:32:28.433 回答
1

我遇到了和你一样的问题。您可以编辑 icu\include\utf8.h 并替换以下行

          #ifdef U_UTF8_IMPL
          U_EXPORT 常量 uint8_t
          #elif 定义(U_STATIC_IMPLEMENTATION)|| 定义(U_COMMON_IMPLEMENTATION)
          U_CFUNC 常量 uint8_t
          #别的
          U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/
          #万一
          utf8_countTrailBytes[256];

              const uint8_t countTrailBytes[256];

这应该可以解决问题。

于 2010-05-31T20:32:17.377 回答