2011-01-17 41 views
8

Tôi đã làm theo hướng dẫn trên "GMP Install Instruction for Windows Platform". Tôi có thể xây dựng một phiên bản 32bit của GMP có thể được sử dụng cho Visual Studio.Xây dựng GMP trên 64bit Windows

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

Sau đó, tôi đã cài đặt mingw_w64 và msys trên máy khác (đang chạy Windows 64 bit) và chạy lại lệnh.

./configure được chạy mà không gặp bất kỳ sự cố nào. Tuy nhiên, khi tôi chạy "làm", tôi nhận được những điều sau đây.

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 

Nếu tôi sử dụng "gmake" thay vào đó, lỗi sau được hiển thị.

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 

Tôi không quen với C++. Tôi có cần phải chỉ định bất kỳ cờ nào để thông báo cho mingw_w64 rằng tôi đang xây dựng cho 64bit không? Cảm ơn.

Trả lời

4

Tôi đã thử cách sau. Thư viện có thể được xây dựng thành công.

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

Bạn có thể muốn xem MPIR. Nó là một nhánh của GMP vốn hỗ trợ Visual Studio.

4

Xem http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php và lưu ý đoạn này;

GMP có thể không, tuy nhiên, cung cấp thư viện 64-bit hiệu suất cao trên Windows bởi vì 64-bit lắp ráp mã của nó không tương thích với Windows x64 ước gọi. Điều này có nghĩa là thư viện GMP 64 bit trên Windows là rất chậm khi so sánh với MPIR, có bộ cộng hưởng 64 bit tuyệt vời hỗ trợ.

Vì vậy, bạn vô hiệu hóa việc lắp ráp với ./configure --disable-assembly hoặc sử dụng MPIR.

+4

NB: Vì [GMP 5.1.0] (http://gmplib.org/list-archives/gmp-announce/2012-December/000036.html) "Hiệu suất trong ABI 64 bit của M $ Windows được cải thiện rất nhiều nhờ hỗ trợ lắp ráp hoàn chỉnh. " (bao nhiêu vì vậy tôi không biết). –

7

Đối với tôi, gmp được xây dựng thành công cho x86 và tôi gặp sự cố khi xây dựng x64. Vấn đề là trong những điều sau đây:

Trong MPN \ fib_table.c:

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

trong khi ở 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 được tạo ra bởi công cụ gen-fix.exe và công cụ này được tạo bằng cách tạo.

Vì vậy, nếu một người cố gắng xây dựng x64 xây dựng sau khi xây dựng x86 (như tôi), nó không đủ để chạy "làm sạch" đầu tiên. Xóa tất cả các tệp "gen - *. Exe" trong thư mục gốc gmp sau khi chạy "làm sạch", tệp này sẽ được tạo lại đúng cách bằng cách thực hiện. gmp x64 đã được xây dựng thành công cho tôi sau đó.

Thử nghiệm trên gmp 6.0.0.

Các vấn đề liên quan