2009-09-08 27 views
7

con Visual Studio 2008, si el tipo de configuración es una biblioteca estática, no veo una opción de enlazador en las propiedades del proyecto. Necesito especificar/MACHINE: opción x64 para una biblioteca estática. Intenté especificar esto en la opción de línea de comando en Bibliotecario. Solo entonces pude construir la biblioteca estática. Si no especifico/MACHINE compiling, la lib estática falla con LNK1112: el tipo de máquina de módulo 'X86' entra en conflicto con el tipo de máquina de destino 'x64' (incluso si configuro la plataforma a X64 para mi solución).compilación de la biblioteca estática de C++ para la plataforma de Windows de 64 bits utilizando VS2008

Con/MACHINE: X64 especificado como línea de comando a través de Project-Properties-Librarian, la biblioteca estática se construyó pero otro proyecto (de tipo de configuración: DLL) en la misma solución tiene una dependencia de la lib estática, cuando el DLL se construye y trata de utilizar una de las funciones en el lib I de nuevo el mismo error:

LNK1112 error grave: los módulos de la máquina de conflictos 'X86' con el tipo de máquina de destino 'x 64'

sugerir por favor, cómo Cómo construyo una biblioteca estática de 64 bits

Respuesta

1

¿Intentó agregar una nueva configuración de proyecto (x64) a th ¿proyecto existente?

Por lo general, no es necesario editar las propiedades del proyecto para compilar en 64 bits. Solo tiene que agregar las configuraciones y asegurarse de que la configuración de la solución sea correcta (la configuración de la solución de 64 bits contiene configuraciones de proyectos de 64 bits).

Puede verificar esto abriendo Build-> Configuration Manager. Mi Visual Studio a veces complica estas configuraciones y hace que el proyecto no esté disponible, por lo que revisarlo de nuevo podría ser útil.

8

Por lo que vale, me he encontrado con este mismo problema.

Tengo un proyecto que compila una biblioteca estática, y la creación de una configuración "x64" NO logró que realmente se dirigiera a x64. Tuve que agregar explícitamente "/ MACHINE: X64" como una "opción adicional" en "Bibliotecario -> Línea de comandos" en las páginas de propiedades del proyecto, tal como lo hizo.

Espero que Visual Studio exponga esta configuración como una propiedad de primera clase en las páginas de propiedades, como lo hace para las bibliotecas dinámicas (en "Enlazador -> Avanzado -> Máquina de destino"). Quizás me estoy perdiendo algo.

2

Según lo mencionado por Timbo, debe asegurarse de que tiene una configuración x64 que está construyendo. Sin embargo, hay un par de otros aspectos críticos a tener en cuenta:

  • Haga una limpieza total de su directorio de construcción en primer lugar en caso de que todavía tienen algunos archivos de objetos de 32 bits por ahí que están causando confusión
  • Compruebe el directorios intermedios y de salida para su proyecto. Si el destino es Debug\Mylib.lib, entonces se encontrará con problemas porque el mismo nombre se está utilizando para las bibliotecas de 32 y 64 bits. Prefiero seleccionar todas las configuraciones y todas las plataformas y luego cambiarles el nombre a algo estándar como ..\build\$(ProjectName)\$(ConfigurationName).$(PlatformName)
  • Compruebe en el administrador de configuración que cuando está construyendo la configuración de 64 bits de la solución que está configurada para compilar el 64-bit configuraciones de los proyectos (esto no siempre ocurre de manera predeterminada)
  • El error: module machine type 'X86' conflicts with target machine type 'x64' significa que el archivo de objeto se ha creado como 32 bits pero la configuración de enlace del proyecto se establece con el indicador /machine:x64.Entonces esto sugiere que la configuración del proyecto es de 32 bits.
  • En caso de duda acerca de lo que ha creado, elija uno de los archivos de objetos y escriba lo siguiente en un símbolo del sistema:

    dumpbin /headers myfile.obj | findstr machine

Esto le mostrará la arquitectura realmente has construido para.

+0

No entiendo el punto 4, ¿qué quiere decir "construido como 32 bits pero la configuración de enlace del proyecto se establece con la bandera/máquina: x64". Solo puedo ver un punto en el que puede establecer/tipo de máquina. –

+0

Es cierto que solo hay un punto en la configuración donde puede establecer el tipo, pero puede ocurrir que una configuración de 32 y 64 bits termine construyendo en el mismo archivo de salida, lo que generará este error. Esto también puede suceder si está utilizando 'NMAKE' en lugar de proyectos de estudio visual. –

Cuestiones relacionadas