我正在尝试使用SQLite3编译一个小的C程序。我已经包含了头文件并将.dll文件转换为.lib文件。
有趣的是,在Windows上,gcc(CodeBlocks)可以编译源代码而不会出现任何问题。但在Debian(Raspberry Pi)下,我收到以下错误消息:/usr/bin/ld: cannot find -lsqlite3.lib sqlite3.lib文件与我要编译的main.c文件在同一个文件夹中。(我也尝试将.lib文件复制到/usr/bin/,但没有成功)
如果我尝试在我的树莓派上运行Windows编译的程序,我会得到另一个错误消息...
以下是我的源代码:
有趣的是,在Windows上,gcc(CodeBlocks)可以编译源代码而不会出现任何问题。但在Debian(Raspberry Pi)下,我收到以下错误消息:/usr/bin/ld: cannot find -lsqlite3.lib sqlite3.lib文件与我要编译的main.c文件在同一个文件夹中。(我也尝试将.lib文件复制到/usr/bin/,但没有成功)
如果我尝试在我的树莓派上运行Windows编译的程序,我会得到另一个错误消息...
以下是我的源代码:
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
static int callback(void *NotUsed, int argc, char **argv, char **azColName);
int main(void){
sqlite3 *db=NULL;
int erg = 0;
char *errMsg = NULL;
erg = sqlite3_open("temp_values.db", &db);
if (erg == 1){
fprintf(stderr, "Fehler beim Oeffnen der DB!\n");
sqlite3_close(db);
return EXIT_FAILURE;
}
else fprintf(stdout, "Database connection successful!\n");
erg = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS temp_values (username TEXT, port TEXT, degrees INTEGER, humidity INTEGER, PRIMARY KEY(username, port));", callback, 0, &errMsg);
if (erg){
fprintf(stderr, "SQL error: %s\n", errMsg);
}
else fprintf(stdout, "Table check successful!\n");
erg = sqlite3_exec(db, "INSERT INTO temp_values (username, port, degrees, humidity) VALUES ('root', '4', 24, 35);", callback, 0, &errMsg);
if (erg){
fprintf(stderr, "SQL error: %s\n", errMsg);
}
else fprintf(stdout, "Inserted tuple successful!\n");
sqlite3_close(db);
return EXIT_SUCCESS;
}
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for (i = 0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
I hope someone can help me ...
/usr/bin/ld: cannot find -lsqlite3.lib
,我怀疑您的 makefile 存在问题(Linux 静态库的扩展名为 .a)。 - fvulibsqlite3-dev
。 - Faheem Mitha.lib
文件与你的代码链接起来,那么这是预期的结果。你需要为OS/CPU编译SQLite。因此,你需要三个不同的SQLite实例,分别为Windows + x86、Linux + x86和Linux + arm。 - fghj