Domanda

Voglio compilare estensione icu sqlite staticamente collegato a icu .

Questo è quello che ho provato, forse l'errore è ovvio per te.

> cd icu/source
> ./runConfigureIcu Linux --enable-static --with-packaging-format=archive
...
> make

> 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"
Undefined symbol utf8_countTrailBytes

File

estensione squite icu

Scarica icu.c da sqlite.org

ICU 4.2.1

Scarica ICU4C da icu-project.org

I miei requisiti

  • Funziona su Linux & amp; Finestre
  • Solo un file che devo distribuire: libSqliteIcu.so .

Hai idea di cos'altro posso provare?

Documentazione

È stato utile?

Soluzione

Questa riga di comando ha funzionato per me su 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 

Nota l'ordinamento dei file della libreria e l'uso di g ++ per assicurarti che venga fatto riferimento al runtime c ++ anche se stiamo compilando un file C.

NB. Ho usato l'output di icu-config --prefix = .. / icu / source --ldflags .

Altri suggerimenti

Ho riscontrato lo stesso problema con te. Puoi modificare icu \ include \ utf8.h e sostituire le seguenti righe

          #ifdef U_UTF8_IMPL
          U_EXPORT const uint8_t 
          #elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION)
          U_CFUNC const uint8_t
          #else
          U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ 
          #endif
          utf8_countTrailBytes[256];

con

              const uint8_t countTrailBytes[256];

Questo dovrebbe fare il trucco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top