2011-01-17 21 views
8

He seguido las instrucciones en el "GMP Install Instruction for Windows Platform". Podría construir una versión de 32 bits de GMP que se puede usar para Visual Studio.Crear GMP en Windows de 64 bits

./configure --prefix=${gmp-install} --disable-static --enable-shared 
make 
make install 

Luego instalado mingw_w64 y MSYS en otra máquina (que ejecuta Windows de 64 bits) y vuelva a ejecutar los comandos.

./configure se ejecutó sin ningún problema. Sin embargo, cuando ejecuto "hacer", obtuve lo siguiente.

m4 -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_add_n -DDLL_EXPORT -DPIC add_n.asm >tmp-add_n.s 
gcc -std=gnu99 -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_add_n -O2 -pedantic -fomit-frame-pointer -mno-cygwin tmp-add_n.s -DDLL_EXPORT -DPIC -o .libs/add_n.o 
tmp-add_n.s: Assembler messages: 
tmp-add_n.s:84: Error: operand type mismatch for `push' 
tmp-add_n.s:85: Error: operand type mismatch for `push' 
tmp-add_n.s:86: Error: operand type mismatch for `push' 
tmp-add_n.s:107: Error: operand type mismatch for `jmp' 
tmp-add_n.s:114: Error: operand type mismatch for `pop' 
tmp-add_n.s:115: Error: operand type mismatch for `pop' 
tmp-add_n.s:116: Error: operand type mismatch for `pop' 
make[2]: *** [add_n.lo] Error 1 
make[2]: Leaving directory `/d/Temp/gmp-5.0.1/mpn' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/d/Temp/gmp-5.0.1' 
make: *** [all] Error 2 

Si en su lugar usé "gmake", se muestra el siguiente error.

m4 gcc -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_add_n -DDLL_EXPORT -DPIC add_n.asm >tmp-add_n.s 
m4: gcc: No such file or directory 
gmake[2]: *** [add_n.lo] Error 1 
gmake[2]: Leaving directory `d:/Temp/gmp-5.0.1/mpn' 
gmake[1]: *** [all-recursive] Error 1 
gmake[1]: Leaving directory `d:/Temp/gmp-5.0.1' 
gmake: *** [all] Error 2 

No estoy familiarizado con C++ make. ¿Debo especificar algún indicador para notificar a mingw_w64 que estoy creando para 64 bits? Gracias.

Respuesta

4

He intentado lo siguiente. La biblioteca se puede construir con éxito.

./configure --prefix=/d/Temp/gmp-5.0.1-install --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --disable-static --enable-shared 
1

Es posible que desee echar un vistazo a MPIR. Es una bifurcación de GMP que admite nativamente Visual Studio.

4

Vea http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php, y tenga en cuenta este párrafo;

GMP no puede, sin embargo, disponen de bibliotecas de 64 bits de alto rendimiento en Windows, ya sus 64 bits de código ensamblador es incompatible con Windows x64 convenciones de llamada. Esto significa que 64 bits bibliotecas GMP en Windows son muy lento en comparación con MPIR, que tiene excelente ensamblador de 64 bits soporte.

ensamblaje Así que o bien desactivar con ./configure --disable-assembly o utilizar MPIR.

+4

NB: Desde [GMP 5.1.0] (http://gmplib.org/list-archives/gmp-announce/2012-december/000036.html) "El rendimiento bajo M $ Windows 'de 64 bits ABI tiene mejorado mucho gracias al completo soporte de ensamblaje ". (cuánto, entonces no lo sé). –

7

Para mí, GMP fue construido con éxito para x86, y he tenido problemas edificio x64. El problema era el siguiente:

En mpn \ fib_table.c:

#if GMP_NUMB_BITS != 32 
Error, error, this data is for 32 bits 
#endif 

mientras que en gmp.h:

#define GMP_LIMB_BITS      64 
#define GMP_NAIL_BITS      0 
#define GMP_NUMB_BITS  (GMP_LIMB_BITS - GMP_NAIL_BITS) 

fib_table.c se genera por la herramienta de gen-fix.exe , y esta herramienta es generada por make.

Por lo tanto, si uno trata de construir x64 después de compilar x86 (como yo), no es suficiente ejecutar primero "make clean". Borre todos los archivos "gen - *. Exe" en la carpeta raíz de gmp después de ejecutar "make clean", make hará los cambios correctamente. gmp x64 se construyó con éxito para mí después de eso.

Probado en gmp 6.0.0.

Cuestiones relacionadas