Compilazione dell'estensione squite icu staticamente collegata a icu
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
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
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