我正在使用sqlite3在C中为我的程序创建一个单词列表搜索器,但是我有these errors。
我尝试了一切,但没有解决。我猜问题出在我的join函数中,但是我不确定。
代码:
bool *gb_wordlist_add_to_list (gbwordlist *word_list,char *str)
{
int sql_error;
char *error_massage;
if (gb_wordlist_in_list (word_list,str))
{
sql_error = sqlite3_execute(word_list->database, gb_wordlist_join(ADD_TO_TABLE_COMMAND"\'",str,"\';"),
NULL ,NULL, &error_massage);
if( sql_error!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", error_massage);
sqlite3_free(error_massage);
return 0;
}
}
else
return 0;
}
char *gb_wordlist_join (char *s1,char *s2,char *s3){
char *s;
s = malloc(strlen(s1) + strlen(s2) + strlen(s3) + 1);
if(s)
{
strcpy(s,s1);
strcat(s,s2);
strcat(s,s3);
}
return s;
}
错误:
gb-sql.o: In function `gb_wordlist_remove_from_list':
/home/reza/Project/GB/Search algorithm/Source/gb-search/src/gb-sql.c:104: undefined reference to `sqlite3_execute'
我的完整代码也是here。非常感谢!
最佳答案
您获得对sqlite3_execute
的未定义引用的原因很可能是没有库的功能。您可能打算使用sqlite3_exec
(在代码的某些部分中使用过)。
注意事项:
函数gb_wordlist_callback
返回int
,但已声明返回int*
。您应该将返回类型更改为int
以匹配要传递给sqlite3_exec
的预期参数(从sqlite3_execute
修改之后)
(从sqlite3_exec
修改后)传递给sqlite3_execute
的第4个参数应为void*
,因此existance
应该为&existance
您有很多函数,声明的返回类型与从函数返回的实际返回类型之间不匹配。
使用-Wall -Wextra
编译器选项编译代码并修复所有警告。这是一个好习惯。
希望这可以帮助!
关于c - sqlite3库未定义引用错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10636753/