2016-04-26 33 views
-1

我知道這是某種鏈接錯誤,並可能是由於我缺少某種編譯器選項。所以請讓我知道我做錯了什麼。鏈接器2019錯誤,同時編譯與cl.exe sqlite示例代碼

我的代碼來自示例程序@http://www.sqlite.org/quickstart.html

#include <stdio.h> 
#include <sqlite3.h> 

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; 
    } 

int main(int argc, char **argv){ 
    sqlite3 *db; 
    char *zErrMsg = 0; 
    int rc; 
    if(argc!=3){ 
     fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]); 
     return(1); 
     } 
    rc = sqlite3_open(argv[1], &db); 
    if(rc){ 
     fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 
     sqlite3_close(db); 
     return(1); 
     } 
    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); 
    if(rc!=SQLITE_OK){ 
     fprintf(stderr, "SQL error: %s\n", zErrMsg); 
     sqlite3_free(zErrMsg); 
     } 
    sqlite3_close(db); 
    return 0; 
    } 

我現在用的是「開發者命令提示符」在Windows中使用以下命令編譯:(SQLite的頭文件是在%USERPROFILE%\ LIB )

​​

,我得到了以下錯誤消息:

Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x86 
Copyright (C) Microsoft Corporation. All rights reserved. 

helloworld.c 
Microsoft (R) Incremental Linker Version 14.00.23918.0 
Copyright (C) Microsoft Corporation. All rights reserved. 

/out:helloworld.exe 
helloworld.obj 
helloworld.obj : error LNK2019: unresolved external symbol _sqlite3_close referenced in function _main 
helloworld.obj : error LNK2019: unresolved external symbol _sqlite3_exec referenced in function _main 
helloworld.obj : error LNK2019: unresolved external symbol _sqlite3_free referenced in function _main 
helloworld.obj : error LNK2019: unresolved external symbol _sqlite3_open referenced in function _main 
helloworld.obj : error LNK2019: unresolved external symbol _sqlite3_errmsg referenced in function _main 
helloworld.exe : fatal error LNK1120: 5 unresolved externals 
+0

你需要對SQLite庫鏈接代碼(有,我認爲,/ L選項 - 雖然我還沒有超過十年用過Windows中,這樣可能是錯誤的)。 –

+0

命令行中沒有庫。 – fukanchik

回答

1

添加SQLite庫文件中的命令行上,像這樣:

cl /I%USERPROFILE%\lib helloworld.c sqlite3.lib 

編輯:看來他們在預編譯的二進制提供一個DEF文件,沒有.LIB。要創建的.lib:

lib /def:sqlite3.def /OUT:sqlite3.lib 
+0

我使用了「%USERPROFILE%\ lib \ sqlite3.lib」。 – Jrican