2016-04-26 71 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