Я следовал инструкции Рика Рейгана http://www.exploringbinary.com/how-to-install-and-run-gmp-on-windows-using-mpir/. К сожалению, по некоторым причинам статическая библиотека работает только с C. Для C ++ компилятор всегда жалуется на проблемы с компоновщиком.Есть несколько различий между текущей версией, которую я использую (2.4.0), и версией Рика Ригана.С другой стороны, я также следовал readme.txt внутри папки build.vc10
, но все еще не мог понять, почему она сломалась.Я использую Windows 7 x64 и использую Visual Studio 2010 - Ultimate.Чтобы быть более конкретным:
- Во-первых, я загружаю исходный код MPIR версии 2.4.0 из http://www.mpir.org/, т.е.
Source tarball bz2
. - Далее я загружаю
yasm
с http://yasm.tortall.net/Download.html. Я загружаю Win64.exe
и Win64 VS2010.zip
и помещаю их обоих в мой каталог VC\bin
.Я также переименовал yasm-1.1.0-win64.exe
в yasm.exe
- . Затем я открываю папку
mpir.sln
в build.vc10
и собираю все проекты lib
в режиме release
, так как я просто хочу использовать статическийбиблиотеки.
После создания этих решений создается папка с именем Win32
, и внутри этой папки есть еще одна папка с именем Release
, в которой находятся четыре других файла библиотеки:
- mpir.lib
- mpirrxx.lib
- mpir.pdb
- mpirxx.pdb
Кроме того, папка lib
внутри build.vc10
также создает две другие папки:
Win32
x64
Затем я скопировал все файлы библиотеки с build.vc10\lib
на мой C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
, а также mpir.h
и mpirxx.h
на мой C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
.
После завершения всех этих шагов я создаю проект консольного приложения Win32 и добавляю два Additional Options
в Project Properties\Linker\Command Line\
.Это:
Затем я собрал несколько примеров с C, и все заработало, как и ожидалось.Тем не менее, когда я попробовал этот конкретный пример:
#include <iostream>
using namespace std;
#pragma warning(disable: 4800)
#include <mpirxx.h>
#pragma warning(default: 4800)
int main (int argc, char *argv[])
{
mpz_class aBigPO2;
aBigPO2 = 1073741824; //2^30
aBigPO2*=aBigPO2; //2^60
aBigPO2*=aBigPO2; //2^120
aBigPO2*=aBigPO2; //2^240
aBigPO2*=aBigPO2; //2^480
aBigPO2*=aBigPO2; //2^960
aBigPO2*=aBigPO2; //2^1920
cout << aBigPO2 << endl;
}
Сбой со многими ошибками:
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_set_si
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_init
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_mul
1>main.obj : error LNK2001: unresolved external symbol ___gmpz_clear
И я понятия не имею, почему это произошло.Я даже пытался скопировать другие альтернативы из папки Win32
, но все равно выдает те же ошибки.Но я не уверен, насколько эти файлы отличаются.Я использую Windows 7 x64, но я не думаю, что у меня Visual Studio x64.Интересно, смешивание 32 и 64 бит может вызвать эту проблему.Любая идея?Спасибо.