2010-01-23 73 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)。