當前位置:首頁 » 編程軟體 » linuxsqlite編譯

linuxsqlite編譯

發布時間: 2023-01-22 14:04:48

❶ 在linux環境里怎麼打開一個sqlite的資料庫

下載一個Linux 的sqlite3工具(或到SqLite網站下載sqlite的源代碼,在你的系統中編譯出sqlite3工具),用這個工具打開:
sqlite3 /tmp/test.db

❷ 在linux下編譯某個程序時,make時出現一下錯誤 Package sqlite3 was not found in the pkg-config search

系統缺少pkg-config包
把安裝路徑添加到 PKG_CONFIG_LIBDIR 即可

❸ Linux下編譯.c文件時sqlite3找不到庫文件如何解決(undefined reference to `sqlite3_open')

建議最好寫個makefile,包含上庫文件
動態的路徑一般是/usr/lib/
靜態庫一般可能是安裝目錄
可以試試rmp -q
或者find / -name
sqlite3

❹ linux下安裝subversion時,svnadmin create出現錯誤提示:svnadmin: SQLite編譯為3.5.9,但運行於3.3.6 這

貌似是你版本不一致導致。請統一編譯的環境。你的svnadmin在編譯的時候連接的SQLite動態或者靜態庫應該是3.5.95版本的。但是你目前系統上用的版本是3.3.6的。版本不同,庫可能會有所改動。

建議你升級本系統的SQLite到3.5.95

哈哈,去試試吧,好使的話記著回來哈

❺ 如何在Linux下用C/C++語言操作資料庫sqlite3

示例代碼:
// name: query.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}

else printf("You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
");
//創建一個表,如果該表存在,則不創建,並給出提示信息,存儲在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
//插入數據
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult; //二維數組存放結果
//查詢數據

sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d
" , nrow , ncolumn );
printf( "
The result of querying is :
" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s
", i , azResult[i] );
//釋放掉 azResult 的內存空間
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}

我們這里用到了一個查詢的語句是 "SELECT * FROM SensorData " ,
c語言中對應的函數介面是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
這個函數介面的解釋在程序中已經注釋。

下面我們編譯運行下看看,
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc query.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
query.c:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306
azResult[14] = 16.4
zErrMsg = (null)
這里我們可以看到,azResult 的前面 5 個數據正好是我們的表 SensorData 的列屬性,
之後才是我們要查詢的數據。所以我們的程序中才有 i<( nrow + 1 ) * ncolumn 的判斷條件:
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )

printf( "azResult[%d] = %s ", i , azResult[i] );
輸出中有 zErrMsg = (null) 這樣的字句,這是 zErrMsg 保留的錯誤信息,
正如你所看到的,zErrMsg 為空,表明在執行過程中沒有錯誤信息。

❻ c語言在linux連接sqlite3問題

如果是在編譯階段出現問題則是沒有引用頭文件
如果是鏈接階段則是沒有鏈接sqlite庫
簡單來說
gcc
test.c
-lsqlite3
這樣編譯,
test.c裡面引用#include
要保證有這個文件
/usr/include/sqlite3.h
(如果位置不對則使用
-I
參數調整)
這只是最原始的辦法,
稍微好點的是使用gcc
test.c
`pkg-config
--libs
--cfalgs
sqlite3`這類形式
具體參考pkg-config這個工具
真實項目中一般都不會這樣用,有專門的工程管理工具如autoconfig,cmake之類的。
對於初學者
建議去熟悉
編譯和鏈接這2個過程的一些介紹,和gcc
的-I
-L
這2個參數。

❼ linux下c操作sqlite3 運行後(編譯沒有錯)當我輸入4(insert-data)直接說段錯誤TAT

段錯誤 用strace來追蹤。

❽ linux下QT4自帶的sqlite驅動不可用該怎麼解決

我告訴你個方法,絕對管用,你這種情況是沒有安裝mysql的驅動,提示只有sqlite的驅動。在命令行下安裝libqt4-sql-mysql(sudoapt-getinstalllibqt4-sql-mysql),然後將/usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so拷貝到你的QtSDKsqldrivers目錄下,我的是在/QtSDK/Desktop/Qt/481/gcc/plugins/sqldrivers,裡面同時還有qsqlite.so,所以剛才會說只能找到qsqlite

❾ 如何在Linux下用C/C++語言操作資料庫sqlite3

這里我們假設你已經編譯好了sqlite的庫文件 :
libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0libsqlite3.so.0.8.6 pkgconfig
和可執行文件 : sqlite3
我們再假設你的sqlite3的安裝目錄在 /usr/local/sqlite3 目錄下。
如果不是,我們可以這樣做,將你的安裝文件復制到 /usr/local/sqlite3 這個目錄,
這樣我們好在下面的操作中更加統一,從而減少出錯的概率
例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86//usr/local/sqlite3
這里假設 /home/sqlite-3.3.8-ix86/是你的安裝目錄,也就是說你的sqlite原來就是安裝在這里
這樣之後,我們的sqlite3的庫文件目錄是:/usr/local/sqlite3/lib
可執行文件 sqlite3 的目錄是: /usr/local/sqlite3/bin
頭文件 sqlite3.h 的目錄是: /usr/local/sqlite3/include
好拉,現在開始我們的Linux下sqlite3編程之旅。
2. 開始
這里我們現在進行一個測試。
現在我們來寫個C/C++程序,調用 sqlite 的 API 介面函數。
下面是一個C程序的例子,顯示怎麼使用 sqlite 的 C/C++ 介面.資料庫的名字由第一個參數取得且第二個參數或更多的參數是 SQL 執行語句. 這個函數調用sqlite3_open() 在 16行打開資料庫,並且sqlite3_close() 在 25 行關閉資料庫連接。
[root@localhost temp]# vi opendbsqlite.c
按下 i 鍵切換到輸入模式,輸入下列代碼:

// name: opendbsqlite.c
// This prog is used to test C/C++ API for sqlite3.It is verysimple,ha!
// Author : zieckey All rights reserved.
// data : 2006/11/13
#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
//打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
rc = sqlite3_open("zieckey.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^
");
sqlite3_close(db); //關閉資料庫
return 0;
}
退出,保存。(代碼輸入完成後,按下 Esc 鍵,然後輸入: :wq ,回車就好拉)
好拉,現在編譯:[root@localhost te

或者遇到這樣的問題:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
opendbsqlite.c:11:21: sqlite3.h: 沒有那個文件或目錄
opendbsqlite.c: In function `main':
opendbsqlite.c:19: `sqlite3' undeclared (first use in thisfunction)
opendbsqlite.c:19: (Each undeclared identifier is reported onlyonce
opendbsqlite.c:19: for each function it appears in.)
opendbsqlite.c:19: `db' undeclared (first use in thisfunction)

這是由於沒有找到頭文件的原因。
也許會碰到類似這樣的問題:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
/tmp/ccTkItnN.o(.text+0x2b): In function `main':
: undefined reference to `sqlite3_open'
/tmp/ccTkItnN.o(.text+0x45): In function `main':
: undefined reference to `sqlite3_errmsg'
/tmp/ccTkItnN.o(.text+0x67): In function `main':
: undefined reference to `sqlite3_close'
/tmp/ccTkItnN.o(.text+0x8f): In function `main':
: undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
這是個沒有找到庫文件的問題。
下面我們著手解決這些問題。
由於用到了用戶自己的庫文件,所用應該指明所用到的庫,我們可以這樣編譯:
[root@localhost temp]# gcc opendbsqlite.c -o db.out-lsqlite3
我用用 -lsqlite3 選項就可以了(前面我們生成的庫文件是 libsqlite3.so.0.8.6 等,
去掉前面的lib和後面的版本標志,就剩下 sqlite3 了所以是 -lsqlite3 )。
如果我們在編譯安裝的時候,選擇了安裝路徑,例如這樣的話:
.......
# ../sqlite/configure --prefix=/usr/local/sqlite3
# make
.......
這樣編譯安裝時,sqlite的庫文件將會生成在 /usr/local/sqlite3/lib 目錄下
sqlite的頭文件將會生成在 /usr/local/sqlite3/include 目錄下
這時編譯還要指定庫文件路徑,因為系統默認的路徑沒有包含 /usr/local/sqlite3/lib
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib

如果還不行的話,可能還需要指定頭文件 sqlite3.h 的路徑,如下:
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/l

這樣編譯應該就可以了 ,運行:
[root@localhost temp]# ./db.out
./db.out: error while loading shared libraries:libsqlite3.so.0: cannot open shared object file: No such file ordirectory
運行是也許會出現類似上面的錯誤。
這個問題因為剛剛編譯的時候沒有選擇靜態編譯,那麼按照默認的編譯就動態編譯的。
動態編譯後,由於可執行文件在運行時要調用系統庫文件,
那麼沿著系統默認的庫文件搜索路徑搜索,就可能找不到我們現在所需的庫文件。
致使出現 "error while loading shared libraries" 等錯誤。
我們可以這樣解決:
方法一:靜態編譯
在編譯時加上 -static 參數,例如
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include -static
[root@localhost temp]# ll
總用量 1584
-rwxr-xr-x 1 root root 1596988 11月 13 10:50 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
可以看到輸出文件 db.out ,其大小為: 1596988k
運行,好了,沒有出現錯誤
[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^
方法二:重新配置系統環境變數 LD_LIBRARY_PATH
這時需要指定 libsqlite3.so.0 庫文件的路徑,也就是配置系統環境變數 LD_LIBRARY_PATH,

使系統能夠找到 libsqlite3.so.0 。
去掉 -static ,在編譯:
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
[root@localhost temp]# ll
總用量 36
-rwxr-xr-x 1 root root 12716 11月 13 10:56 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
[root@localhost temp]#
可以看到輸出文件 db.out ,其大小為: 12716k,比剛才的靜態編譯要小得多。
所以我們推薦使用動態編譯的方法。
好了,現在我們來指定系統環境變數 LD_LIBRARY_PATH 的值
在shell下輸入:
[root@localhost temp]# exportLD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
再運行
[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^

❿ arm-linux-gcc編譯使用sqlite3資料庫的程序,出錯提示找不到sqlite3.h頭文件,求高手指點

使用 -I (大寫的字母 i)包含 sqlite3.h的路徑

如: sqlite3.h 在 /home/john/embed/database/sqlite/ 目錄下
arm-linux-gcc -I/home/john/embed/database/sqlite ...

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:710
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:972
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:681
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:833
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:741
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1081
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:312
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:192
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:879
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:837