Проблемы связывания и sqlite3.h с gcc

Я работаю над Linux Mint 15. Я скачал sqlite-amalgamation-3080002.zip от http://www.sqlite.org/download.html (и поместите файлы в каталог моего проекта)

Я сделал (хотя я знаю, что это избыточно для предыдущего шага):

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev

sqlite3 работает в командной строке просто отлично, и я могу создавать/редактировать базы данных.

Я создал тестовый файл:

#include <stdio.h>
#include <sqlite3.h> 

int main(int argc, char* argv[]){
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;
   rc = sqlite3_open("test.db", &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfullyn");
   }
   sqlite3_close(db);
}

и побежал:

gcc ./sqliteTest.c -o sqliteTest -lsqlite

и получил следующее ошибка:

./sqliteTest.c: In function ‘main’:
./sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
/usr/bin/ld: cannot find -lsqlite
collect2: error: ld returned 1 exit status

пробовал:

gcc -Wall sqliteTest.c -o sqliteTest -lsqlite

и у:

sqliteTest.c: In function ‘main’:
sqliteTest.c:14:7: warning: implicit declaration of function ‘exit’ [-Wimplicit-function-declaration]
sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
sqliteTest.c:7:10: warning: unused variable ‘zErrMsg’ [-Wunused-variable]
sqliteTest.c:19:1: warning: control reaches end of non-void function [-Wreturn-type]
/usr/bin/ld: cannot find -lsqlite
collect2: error: ld returned 1 exit status

Я изменил <sqlite3.h> to "sqlite3.h" и сделал первую команду компиляции и получил:

./sqliteTest.c: In function ‘main’:
./sqliteTest.c:14:7: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
/tmp/ccvdOOv2.o: In function `main':
sqliteTest.c:(.text+0x24): undefined reference to `sqlite3_open'
sqliteTest.c:(.text+0x39): undefined reference to `sqlite3_errmsg'
sqliteTest.c:(.text+0x89): undefined reference to `sqlite3_close'
collect2: error: ld returned 1 exit status

Я в тупике... Что мне делать дальше?

4 ответов


SQLite-это только исходная библиотека. Вы вставляете источник в приложение, не связываясь с ним. Таким образом, неопределенная ссылка исходит из того, что вы не можете включить исходный файл sqlite. Попробуйте компиляцию как

gcc -O3 sqliteTest.c sqlite3.c -o sqliteTest -lpthread -ldl

Ну, сначала вы должны #include <stdlib.h> иметь соответствующее объявление exit() в области, а во-вторых, вы должны помнить, что то, с чем вы пытаетесь связать, называется "sqlite3", и замените -lsqlite в строку с -lsqlite3.


это работает

gcc ./sqliteTest.c -o sqliteTest -lsqlite3

CodeLite: щелкните правой кнопкой мыши проект>настройки>компоновщик: 1. Путь поиска библиотек: / usr / include (путь, где sqlite3.ч); 2. Библиотеки : и sqlite3 3. нажмите OK и F7 для восстановления проекта