8

私は Linux Mint 15 に取り組んでいます。http:sqlite-amalgamation-3080002.zip //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: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }
   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>"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

4 に答える 4

9

SQLite はソースのみのライブラリです。ソースをリンクするのではなく、アプリケーションに埋め込みます。したがって、未定義の参照は、sqlite のソース ファイルのインクルードに失敗したという事実に由来します。としてコンパイルしてみてください

gcc -O3 sqliteTest.c sqlite3.c -o sqliteTest -lpthread -ldl
于 2013-09-13T02:22:45.750 に答える
5

まず、スコープ内で#include <stdlib.h>適切な宣言を行う必要がありexit()ます。次に、リンクしようとしているものの名​​前が「sqlite3」であることを覚えておいて-lsqlite、リンク行の を に置き換えてください-lsqlite3

于 2013-09-13T02:04:54.860 に答える