Red de conocimiento informático - Aprendizaje de código fuente - Los novatos necesitan consejos sobre cómo compilar e instalar el código fuente del controlador

Los novatos necesitan consejos sobre cómo compilar e instalar el código fuente del controlador

1. Instale scons

(1) Descargue python2.7, use x86_32 bit, porque scons solo tiene un instalador de 32 bits disponible

(2) Descargue scons2.3.0; /p >

(3) Instale python y scons, y escriba C:\Python27\Scripts en PATH;

(4) Descargue e instale pywin32. Si desea compilar en paralelo, es. Se recomienda instalar pywin32 (scons -j)

2. Instale la biblioteca boost (versión 1.49).

Descomprima y haga doble clic en bootstrap.bat para generar bjam.exe, cd al directorio c:\boost (renombrado a boost_1_49) para compilar boost.

Comando de compilación: C: \ boostgt;bjam variante=lanzamiento -- con-sistema de archivos --con-a través -- con-sistema de archivos -- con-sistema de archivos -- con-a través -- con-sistema de archivos con-sistema de archivos --con-hilo --con-fecha_hora - -with-program_options threading=multi toolset=msvc-10.0 link=static runtime-link=static Address-model=32

Esta es una versión compilada utilizando el entorno VS2010. Después de la compilación, se generará la carpeta C:\boost\stage\lib, con seis bibliotecas debajo:

Si desea compilarlo en una versión de depuración, puede usar el siguiente comando: bjam variante = depurar -- con-sistema de archivos --con-hilo --con-fecha_hora --con-opciones_de_programa threading=multi toolset=msvc-10.0 enlace=tiempo de ejecución estático-enlace= dirección-modelo estático=32

Una vez completada la compilación, se generará la carpeta C:\boost\stage\lib, con 10 bibliotecas y dlls a continuación:

El siguiente es el documento original de MongoDB para compilar la biblioteca boost:

Cuando use bjam, MongoDB Hope

Use variante=debug al depurar la compilación, use variante=liberación al publicar la compilación

threading=multi

Utilice link=static runtime-link cuando publique la compilación =static

Utilice adress-model=64 para 64 bits. link=static runtime-link=static, boost debe compilarse en una biblioteca estática, porque mongodb solo se vinculará a la biblioteca estática de boost

se requiereaddress-model=64 en el entorno Win7 64, si no agregado, se producirá un error de enlace al compilar el cliente c de mongodb.

3. Descargue el código fuente mongo2.4.6 http://www.mongodb.org/downloads descarga del sitio web oficial

Compile Mongoclient.lib

símbolo del sistema cmd , cd al directorio donde se encuentra el archivo descomprimido, por ejemplo, lo puse en la unidad E, E:\mongodb-src-r2.4.6, ingrese el comando: dirección-modelo = 64.

scons --dd --32 mongoclient.lib // Cree la biblioteca de controladores del cliente C

Agregue --64 o --32 para obtener versiones de 64 y 32 bits respectivamente. - y versiones de 32 bits.

Compila y construye mongoclient_build en mongodb\build\win32\32\32\dd\client_build\.mongoclient.lib.

4. Programa de prueba

Mongodb viene con ejemplos, use VS2010 para abrir simple_client_demo.vcxproj en E:\mongodb-src-r2.4.6\src\mongo\client\examples. Compile, le pedirá que genere simple_client_demo.sln y guárdelo.

Utilice el modo de depuración, configure el entorno del proyecto: abra las propiedades del proyecto -gt; configure el directorio VC en Propiedades de configuración, agregue C:\boost a la ruta del archivo de encabezado, agregue la biblioteca de boost a la biblioteca Lib. ruta y la biblioteca final del cliente mongodb:

C:\boost\stage\lib

E:\mongodb-src-r2.4.6build\win32\32\32dd\client_build

E:\boost\stage\lib

E:\boost\stage\lib

C:\boost\stage\lib

C:\boost \stage\lib

E:\mongodb-src-r2.4.6 (build\win32\32\32dd\client_build)

Ingrese el C/C generación de código en el directorio VC, configure la biblioteca de tiempo de ejecución en depuración multiproceso (/MTd)

Ingrese la entrada en el vinculador, establezca dependencias adicionales, agregue ws2_32.lib, psapi.lib, Dbghelp.lib , mongoclient.lib

p>

Copie los archivos error_codes.h y error_codes.cpp generados en el directorio E:\mongodb-src-r2.4.6\build\win32\32\dd mongo\base a E :\mongodb-src-r2.4.6\src\mongo\base directorio.

OK, compila y ejecuta.

5. Resolución de problemas

error LNK2038: no coincide con '_MSC_VER': el valor '1700' no coincide con el valor '1600' en error_codes.obj

1gt.mongoclient_d.lib(dbclient.obj): error LNK2038: no coincide con '_MSC_VER': el valor '1700' no coincide con el valor '1600' en error_codes.obj

1gt;mongoclient_d.lib (assert_util.obj): error LNK2038: no coincide con '_MSC_VER': el valor '1700' no coincide con el valor '1600' en error_codes.obj

1gt; mongoclient_d.lib(jsobj.obj) : error LNK2038: discrepancia detectada para '_MSC_VER': el valor '1700' no coincide con el valor '1600' en error_codes.obj

1gt; mongoclient_d.lib(status.obj): error LNK2038: discrepancia detectada; para '_MSC_VER': el valor '1700' no coincide con el valor '1600' en error_codes.obj

1gt; mongoclient_d.lib(mutexdebugger.obj): error LNK2038: no coincide con '_MSC_VER': valor '1700' no coincide con el valor '1600' en error_codes.obj

La versión de VS no coincide, la biblioteca se compila y genera en una versión más avanzada, y cuando se usa, se usa en una versión anterior, de ahí el error de discrepancia. Por ejemplo, estoy compilando en el entorno VS2010 SP1 y VS2012, pero lo uso en VS2010, por lo que el problema anterior ocurre al compilar.

1gt;mongoclient.lib(stacktrace.obj): error LNK2001: símbolo externo no resuelto __imp_SymCleanup

1gt;mongoclient.lib(stacktrace.obj): error LNK2001: símbolo externo no resuelto __imp_SymGetModuleInfo64

1gt;mongoclient.lib(stacktrace.obj): error LNK2001: símbolo externo no resuelto __imp_SymInitialize

1gt;mongoclient.lib(stacktrace.obj): error LNK2001: símbolo externo no resuelto __imp_StackWalk64

1gt; mongoclient.lib(stacktrace.obj): error LNK2001: símbolo externo no resuelto __imp_SymFromAddr

Agregue Dbg en Add Dbghelp.lib para agregar Dbg a las dependencias del proyecto

p>

Si tiene otras preguntas, verifique si el compilador que tiene, la versión compilada de la biblioteca boost y la versión mongoclient.lib son consistentes.