Сборка GMP на 64-битной Windows - PullRequest
9 голосов
/ 17 января 2011

Я следовал инструкции «Инструкция по установке GMP для платформы Windows» . Я мог бы создать 32-битную версию GMP, которую можно использовать для Visual Studio.

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

Затем я установил mingw_w64 и msys на другую машину (на которой установлена ​​64-битная Windows) и снова запустил команды.

. / Configure был запущен без проблем. Однако когда я запускаю «make», я получаю следующее.

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

Если вместо этого я использовал «gmake», была показана следующая ошибка.

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

Я не знаком с C ++ make. Нужно ли указывать какой-либо флаг, чтобы уведомить mingw_w64 о том, что я собираю 64-битную версию? Спасибо.

Ответы [ 5 ]

8 голосов
/ 11 июля 2014

Для меня gmp был успешно собран для x86, и у меня были проблемы со сборкой x64. Проблема была в следующем:

В mpn \ fib_table.c:

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

в 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 генерируется утилитой gen-fix.exe, а этот инструмент генерируется make.

Итак, если кто-то пытается собрать сборку x64 после сборки x86 (как и я), недостаточно сначала запустить make make. Удалите все файлы «gen - *. Exe» в корневой папке gmp после запуска «make clean», эти файлы будут правильно восстановлены командой make gmp x64 был успешно собран для меня после этого.

Проверено на gmp 6.0.0.

4 голосов
/ 17 января 2011

См. http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php и обратите внимание на этот параграф;

Однако GMP не может предоставить высокопроизводительные 64-разрядные библиотеки в Windows, поскольку его 64-разрядный код на ассемблере несовместим с Windowsx64 соглашения о вызовах.Это означает, что 64-битные библиотеки GMP в Windows работают очень медленно по сравнению с MPIR, который имеет отличную поддержку 64-битных ассемблеров.

Таким образом, вы либо отключаете сборку с помощью ./configure --disable-assembly, либо используете MPIR .

4 голосов
/ 19 января 2011

Я пробовал следующее.Библиотека может быть успешно построена.

./configure --prefix=/d/Temp/gmp-5.0.1-install --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --disable-static --enable-shared
3 голосов
/ 30 августа 2018

Как я построил динамический dll gmp-6.1.2 для Windows, чтобы dll можно было связать для визуального студийного проекта.

Настройка среды

  • Установите 7-Zip
  • Установите Cygwin, добавьте следующие пакеты к установке по умолчанию
    • gcc-core
    • gcc-g ++
    • libgcc
    • m4
    • make
    • cmake
    • bash
  • Добавить следующую переменную среды в ПУТЬ пользователя: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\Hostx64\x64
    • Это позволяет использовать команду lib.Ваш lib.exe может находиться в другом месте.

Сборка GMP

  • Загрузите версию tar.bz2 из https://gmplib.org/#DOWNLOAD и распакуйте gmp-Папка 6.1.2 с 7-zip.
  • Запустите bash.exe из C:\cygwin64\bin.
  • Перейдите в распакованную папку gmp-6.1.2.Пример: cd "A:\Code\gmp-6.1.2"
  • Выполнить ./configure --disable-static --enable-shared
  • Выполнить make
    • Это создаст cyggmp-10.dll в A:\Code\gmp-6.1.2\.libs\
  • Выполнить make check
  • Выполнить cd ./libs
  • Выполнить lib /machine:i386 /def:cyggmp-10.dll
    • Это сгенерирует cyggmp-10.exp и cyggmp-10.lib в A:\Code\gmp-6.1.2\.libs\ для использования сvisual studio

Теперь у вас есть все необходимое для вызова gmp из кода C #.

1 голос
/ 17 января 2011

Возможно, вы захотите взглянуть на MPIR . Это форк GMP, который изначально поддерживает Visual Studio.

...