2014-09-15 4 views
0

Я пытаюсь использовать sqlite с C. В Python очень просто сделать это, но когда я попытаюсь сделать то же самое с C, я получаю сообщение об ошибке.Ошибка связи sqlite C

Я нашел это:

libsqlite in simulator and iOS compiling

, но я просто с помощью текстового редактора, поэтому я не могу использовать XCode (ну, я мог бы, но я не). Когда я

#include <sqlite.h> // or "sqlite.h" 

Я получаю сообщение об ошибке, как так:

Undefined symbols for architecture i386: 
    "_sqlite3_open", referenced from: 
     _main in ccb8OLfK.o 
    "_sqlite3_exec", referenced from: 
     _main in ccb8OLfK.o 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 

Если вы хотите взглянуть на мой код, вот все это:

#include <stdio.h> 
#include <stdlib.h> 

#include <sqlite3.h> 

#include <string.h> 

int main(void) { 
    /* variables */ 
    // create value for storing return codes 
    int retval; 

    // the number of queries to be handled 
    int qnum; 

    // size of each query 
    int qsize; 

    // pointer 
    int ind; 

    // statement for fetching tables 
    sqlite3_stmt *stmt; 

    // pointer to sqlite3 
    sqlite3 *db; 

    // db name 
    char *home = getenv("HOME"); 
    char *dbPath = strcat(home, "/Desktop/test.db"); 

    /* connect and write */ 
    // Try to connect to database (if fails, returns null) 
    retval = sqlite3_open(dbPath, &db); 
    if (retval) { 
     printf("\x1B[31;1mConnection failed.\x1B[0m\n"); 
     exit(1); 
    } else { 
     printf("\x1B[32;1mConnected to Database.\x1B[0m\n"); 
    } 

    // create table 
    char q[100] = "create table if not exists test (user text not null, psswd text not null);"; 
    retval = sqlite3_exec(db, q, 0, 0, 0); 
} 

Он имеет несколько неиспользованными переменных до сих пор и создает только таблицу (если бы я мог так далеко), но она должна компилироваться и работать нормально.

Я новичок в C (Java -> Python -> C). Как мне заставить это работать?

Это кажется очень большой болью, поэтому я могу просто загрузить заголовочный файл для sqlite3 (я бы не знал, откуда это), и включить его в кавычки? Я не знаю, как связать файл, и я бы просто хотел, чтобы этот предварительный тест работал.

ответ

1

Вы также должны загрузить исходный код sqlite3 и скомпилировать его с вашим приложением. Заголовок содержит информацию о функциях; исходный код sqlite3 (рекомендуется «объединение») предоставляет фактические реализации, чего хочет компоновщик.

+0

Хорошо, я просто сделал это с доморощенным. Это должно работать правильно? ... В sqlite-каталоге в подвале Homebrew (/ usr/local/Cellar /) есть sqlite.h. – dylnmc

+1

В таком случае, да, просто связывайтесь с '-lsqlite3' или включайте библиотеку в Xcode. (AFAIK Xcode должен иметь поддержку sqlite3 как часть CoreData, но я еще не коснулся этой части iOS) – nneonneo

+0

Как я уже сказал, я не использую Xcode ... Я просто использую текстовый редактор. Я помещаю заголовок в тот же каталог, но я понятия не имею, что с ним делать. Мне придется уйти на ночь. Спасибо за помощь! – dylnmc

Смежные вопросы