2010-01-23 71 views
1

你好我得到这个eror:符号像_sqlite3_open没有发现错误

 
Undefined symbols: 
    "_sqlite3_open", referenced from: 
     _main in ccRlWVer.o 
    "_sqliite3_close", referenced from: 
     _main in ccRlWVer.o 
    "_sqlite3_exec", referenced from: 
     _main in ccRlWVer.o 
    "_sqlite3_errmsg", referenced from: 
     _main in ccRlWVer.o 
    "_sqlite3_close", referenced from: 
     _main in ccRlWVer.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

这是我的代码:

const char * filename = "database.db"; 
sqlite3 * ppDb; 
int rc; 
rc = sqlite3_open(filename, &ppDb); 
if(rc){ 
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(ppDb)); 
    sqlite3_close(ppDb); 
    exit(1); 
} 

char * errMsg = 0; 
sqlite3_exec(ppDb, sql ,display_result, 0, &errMsg); 
if(rc!=SQLITE_OK){ 
    fprintf(stderr, "SQL error: %s\n", errMsg); 
} 


sqliite3_close(ppDb); 
return 0; 

回答

11

你必须通过你想链接你的代码的库,在这种情况下它是sqlite3。

如果你正在使用gcc尝试添加:

-lsqlite3 

要将参数传递给GCC在你的makefile /建命令。

1

您的代码是没有问题的,只是在最后一行的错字。您收到的错误表示链接时出现问题,具体说明sqlite3_*符号无法通过链接器解析。

您可能需要指定sqlite库的位置。如果你用你用来编译的命令扩展你的问题,我可以扩展我的答案=)

1

它看起来像编译器无法找到sqlite库。编译时一定要通过标志(至少对于gcc)。