Привет, я получаю это сообщение:

Undefined symbols:
  "_sqlite3_open", referenced from:
      _main in ccRlWVer.o
  "_sqliite3_close", referenced from:
      _main in ccRlWVer.o
  "_sqlite3_exec", referenced from:
      _main in ccRlWVer.o
  "_sqlite3_errmsg", referenced from:
      _main in ccRlWVer.o
  "_sqlite3_close", referenced from:
      _main in ccRlWVer.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Это мой код:

const char * filename = "database.db";
sqlite3 * ppDb;
int rc;
rc = sqlite3_open(filename, &ppDb);
if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(ppDb));
    sqlite3_close(ppDb);
    exit(1);
}

char * errMsg = 0;
sqlite3_exec(ppDb, sql ,display_result, 0, &errMsg);
if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", errMsg);
}


sqliite3_close(ppDb);
return 0;
c
1
SuperString 23 Янв 2010 в 23:40

3 ответа

Лучший ответ

Вы должны передать библиотеку, с которой хотите связать свой код, в этой ситуации это sqlite3.

Если вы используете gcc, попробуйте добавить:

-lsqlite3 

К вашим аргументам вы передаете gcc в вашей команде makefile / build.

12
Karl-Johan Sjögren 28 Авг 2013 в 17:22

Проблема не в вашем коде, за исключением опечатки в последней строке. Полученная вами ошибка указывает на проблему при связывании, в частности на то, что символы sqlite3_* не могут быть разрешены компоновщиком.

Вероятно, вам нужно указать расположение библиотеки sqlite. Если вы расширите свой вопрос командами, которые вы используете для компиляции, я могу расширить свой ответ =)

1
gnud 23 Янв 2010 в 23:43

Похоже, компилятор не может найти библиотеку sqlite. Обязательно передайте флаг -lsqlite3 при компиляции (по крайней мере, для gcc).

1
Kyle Lutz 23 Янв 2010 в 23:44