2010-10-08 21 views
9

Estoy tratando de agregar SQLite a mi proyecto a través de una DLL.¿Cómo incluyo una DLL de SQLite en mi proyecto de C++?

He descargado SQLiteDLL-3 del download page, he extraído su contenido (un archivo DLL y .h) y ejecuté lib.exe en él para generar un archivo .lib. Luego configuro el directorio que contiene los archivos .lib y .dll para que sea un Directorio de biblioteca adicional, en la configuración del proyecto, en Linker >> General.

Luego descargué SQLiteSource-3 de la página de descarga y extraje el archivo SQLite3.h en el directorio con los archivos .Lib y .DLL, y agregué ese directorio como un directorio de inclusión adicional en C/C++ >> General . Agregué #include a mi archivo principal, y luego agregué sqlite3.dll como Dependencia Adicional en Linker >> Entrada.

Básicamente seguido this, pero cuando lo ejecuto, me sale un error diciendo:

fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B8 

He intentado varias cosas para corregirlo, incluyendo la construcción del archivo .lib bajo x86 y x64, e incluyendo la ruta completa al archivo .lib en la lista de Dependencias Adicionales. Siempre es ese error el que obtengo. Parece al menos encontrar el archivo .h bien, porque si me meto con el nombre en el include, aparece el error "no se puede encontrar el archivo", por lo que esa parte parece ser correcta.

¿Alguien puede ver lo que podría estar haciendo incorrectamente y cómo corregir el problema?

Actualización: ha solucionado el problema "archivo no válido o está dañado" al añadir el archivo .lib a la lista Dependies adicionales, en comparación con el archivo .dll. Ahora que estoy recibiendo errores no resueltos vinculador:

LNK2019 de error: símbolo externo sin resolver _sqlite3_exec referencia en función de _main

LNK2019 de error: símbolo externo sin resolver _sqlite3_open referencia en función de _main

fatal error LNK1120: 2 externos sin resolver

+6

añadir el archivo .lib como una entrada de conector, no el archivo .dll. – Blindy

+1

Eso borró ese error. Gracias. Ahora estoy obteniendo errores de enlazador de símbolos externos no resueltos para cada llamada a una función de SQLite. Las funciones aparecen en intellisense, si eso importa en todo. –

+0

¿Cuál es uno de los símbolos que faltan? (Debería decir en el error) – dgnorton

Respuesta

1

Si recuerdo sqlite derecha está escrito en C ¿el archivo tiene sqlite3.h

extern "C" {} 

envolviendo las declaraciones? Es posible que tenga problemas name mangling.

+0

Lo hace de hecho. ¿Alguna sugerencia sobre una solución? –

+0

Cuando ejecuta el programa, el archivo dll debe estar en el mismo directorio que el ejecutable o en el directorio de Windows. (El archivo lib no) – Jay

+0

En sus problemas de compilación: ¿Creo que está usando netbeans como un IDE? Ha puesto en el directorio donde se puede encontrar el archivo lib, pero no le ha dicho al proyecto que incluya esa biblioteca específica. En Linker >> General >> Bibliotecas >> Agregar archivo de biblioteca y luego elegir el archivo sqlite3.lib. – Jay

11

Esto es lo que funcionó para mí:

En Visual Studio 2010, haga clic en "Herramientas, VS Símbolo del sistema"

En la ventana de línea de comandos, introduzca, por ejemplo:

lib /DEF:"C:\SQLite\sqlite3.def" /OUT:"C:\SQLite\sqlite3.lib" 

En la ventana del Explorador de soluciones, haga clic con el botón derecho en su proyecto y agregue el archivo "sqlite3.lib".

(uno pensaría que la banda SQLite podría incluir un .lib en la descarga?)

+0

¿Cómo lo hacemos en Visual Studio 2012? Me da el error "Command" lib "no es válido. – satur9nine

+0

Esto corrige el mensaje" no resuelto externo "y la aplicación se ejecuta ... y se bloquea inmediatamente. 'No se puede activar la aplicación de la Tienda Windows .... El proceso ... comenzó, pero la solicitud de activación falló con el error" La aplicación no se inició ".' – McGarnagle

+0

Mi error - la respuesta aquí también me funciona (mi anterior se me debe hacer un comentario para construir x86 para un proyecto x64, como un idiota). – McGarnagle

Cuestiones relacionadas