2009-05-05 8 views
9

Sto provando a compilare la sorgente SQLite amalgamation nell'app per iPhone (per concedermi l'accesso alla funzionalità di ricerca di testo completo che non è disponibile nella versione del binario compilata per iPhone.Compilare SQLite personalizzato per un'app per iPhone

Quando aggiungo sqlite3.c e sqlite3.h a un normale modello di app di Carbon C, esso viene compilato correttamente (con un solo avviso relativo a una variabile non utilizzata), ma quando provo a compilarlo nel mio progetto iPhone ottengo un numero di errori relativi a dichiarazioni di funzioni mancanti Sono in grado di risolvere questi problemi includendo esplicitamente ctype.h, ma è un po 'strano

Tuttavia, anche dopo la sua creazione fallisce nel collegamento con foll a causa di errore:

"_sqlite3_version", referenced from: 
_sqlite3_version$non_lazy_ptr in sqlite3.0 
symbol(s) not found 
collect2: ld returned 1 exit status 

presumo che è qualcosa in impostazioni di generazione del iPhone app, ma non riesco a capirlo. Qualche idea?

+0

Perché stai utilizzando un modello di app di Carbon C per la distribuzione di iPhone? –

+0

Non lo sono. Volevo solo vedere se sarebbe stato compilato ovunque, ad esempio, se le impostazioni del progetto iPhone stavano causando i problemi, quindi ho pensato che il modello base di Carbon C sarebbe stato il meno probabile a interferire. –

+0

(e, per inciso, avevo ragione, in quanto compilato bene) –

risposta

5

provare con questa procedura:

  1. menù Xcode -> Progetto -> nuovo obiettivo -> static library -> nome di destinazione: SQLite
  2. goccia SQLite fonte fusione nel progetto, ora è possibile selezionare la destinazione, scegliere SQLite
  3. menù Xcode -> progetto -> modifica di destinazione attiva -> scheda Generale -> dipendenze diretti -> aggiungere SQLite
  4. scheda Generale -> Linked biblioteche -> aggiungere lo SQLite
+0

Ho finito per fare una variazione di questo, seguendo le indicazioni qui: http://www.clintharris.net/2009/iphone-app-shared-libraries/ Ha funzionato abbastanza bene. –

+0

@makdad che il collegamento sembra essere rotto –

0

Questo tipo di errore indica in genere un framework mancante.

  1. tasto destro o il controllo del mouse sul cartella Frameworks del progetto.
  2. Selezionare Add> quadro esistente ...
  3. Vai a: Macintosh HD> sviluppatore> Piattaforme> iPhoneOS.platform> sviluppatore> SDK> iPhoneOS2.2sdk> usr> lib e selezionare libsqlite3.dylib
  4. Rigenerare il progetto

Questo dovrebbe prendersi cura di esso, penso. Potrebbe essere necessario aggiungere una libreria simile per l'esecuzione su iPhone Simulator.

+0

Ma se lo faccio, si collegherà alla libreria SQLite integrata, giusto? Considerando che voglio usare la mia compilazione personalizzata (perché ha caratteristiche che quella integrata non lo fa). –

+0

Non so che puoi farlo. Ho la sensazione che a Apple non piacerà. Potrei sbagliarmi anche se –

+0

@bdotdub - puoi sicuramente farlo - e perché la cura di apple? non è come se stesse cercando di sostituire la versione del sistema, basta compilare una nuova versione utilizzata dalla sua applicazione. è piuttosto una pratica standard. –

1

Sono riuscito a farlo usando l'amalgama e l'ho scaricato direttamente nel mio progetto senza dover fare il link suggerito da catlan (non sto dicendo che sia una cattiva idea, semplicemente è possibile farlo nel progetto principale).

Non ho bisogno di modificare nulla (tranne che per aggiungere la definizione FTS necessaria per la ricerca del testo) e compilato senza errori. Controlla le impostazioni di costruzione e assicurati che "-sqlite3" non sia negli altri banner di collegamento.

Problemi correlati