链接sqlite C时出错

时间:2014-09-15 01:37:18

标签: c sqlite

我正在尝试使用带有C的sqlite。在Python中执行此操作非常容易,但是当我尝试使用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 - &gt; Python - &gt; C)。我如何让它工作?

这似乎是一个非常大的痛苦,所以我可以只下载sqlite3的头文件(我不知道从哪里)并用引号包含它?我不知道如何链接文件,我只想这个初步测试工作。

1 个答案:

答案 0 :(得分:1)

您还必须下载sqlite3源代码并使用您的应用程序进行编译。标题仅提供有关函数的信息; sqlite3源代码(&#34; amalgamation&#34;推荐)提供实际的实现,这是链接器想要的。