2016-04-26 8 views
-1

Ich weiß, dass dies eine Art von Linking-Fehler ist, und wahrscheinlich wegen mir fehlt eine Art von Compiler-Option. Also lass mich wissen, was ich falsch mache.Linker 2019 Fehler beim Kompilieren von sqlite Beispielcode mit cl.exe

Mein Code stammt aus dem Beispielprogramm @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; 
    } 

ich die "Entwickler Eingabeaufforderung" mit dem folgenden Befehl in Windows bin mit zu kompilieren: (die SQLite-Header-Datei in% ist USERPROFILE% \ lib

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

und ich erhalte die folgende Fehlermeldung:

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

Sie müssen Ihren Code gegen die SQLite-Bibliothek verknüpfen (mit, nehme ich an, Option/L - obwohl ich nicht mit Windows in mehr als einem Jahrzehnt verwendet haben, so dass falsch sein könnte). –

+0

In Ihrer Befehlszeile befindet sich keine Bibliothek. – fukanchik

Antwort

1

Fügen Sie die SQLite-Library-Datei auf der Befehlszeile wie folgt aus:

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

EDIT: Es scheint, dass sie eine DEF-Datei in ihren vorkompilierte Binaries bieten und keine LIB. So erstellen Sie die LIB-:

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

Ich habe "% USERPROFILE% \ lib \ sqlite3.lib" verwendet. – Jrican