программа на c++ с использованием библиотеки GMP
Я установил GMP, используя инструкцию на этом веб-сайте:http://www.cs.nyu.edu/exact/core/gmp/ Затем я искал пример программы, использующей библиотеку:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum is " << c << "n";
cout << "absolute value is " << abs(c) << "n";
cin >> a;
return 0;
}
но если я скомпилирую это с помощью команды: G++ test.тест ЦТП-вывода.exe, он говорит gmpxx.ч: нет такого файла или каталога. Как я могу это исправить? Я новичок в этом. И я использую MinGW.
6 ответов
получить фактическую версию здесь GNU GMP Library. Убедитесь, что вы настроили его для установки в /usr/lib (pass --prefix=/usr для настройки).
здесь у вас есть документация:руководство GNU GMP.
вы неправильно используете lib. Я не знаю, можете ли вы напрямую получить доступ к значениям mpx с функциями C++, но здесь у вас есть рабочий пример того, чего вы хотели достичь:
#include<iostream>
#include<gmp.h>
using namespace std;
int main (int argc, char **argv) {
mpz_t a,b,c;
mpz_inits(a,b,c,NULL);
mpz_set_str(a, "1234", 10);
mpz_set_str(b,"-5678", 10); //Decimal base
mpz_add(c,a,b);
cout<<"\nThe exact result is:";
mpz_out_str(stdout, 10, c); //Stream, numerical base, var
cout<<endl;
mpz_abs(c, c);
cout<<"The absolute value result is:";
mpz_out_str(stdout, 10, c);
cout<<endl;
cin.get();
return 0;
}
компиляция с помощью:
g++ -lgmp file.cpp -o file
вот правильная процедура настройки текущих (по состоянию на 7/2/13) библиотек GNU bignum с Eclipse CDT, MinGW и msys для C++. Чтобы пройти через это, вы должны использовать Unix или Linux, а также Windows, и вы должны иметь смутное воспоминание о программировании и компиляции программ. Это кульминация более недели исследований и хардкорного разочарования, поэтому, если я что-то испортил, обратите внимание на это вежливо, или Я взорву вас силой моего ум!
Я предполагаю, что вы уже загрузили и установили Eclipse и MinGW и установили msys в MinGW. Вы должны установить MinGW перед msys!
загрузите tarball для библиотек GMP из gmplib.org до ${gmp_download}. Я загрузил gmp-5.1.2.смола.xz, потому что я никогда не использовал lzip и не знал, доступен ли он в msys.
-
откройте окно msys (по сути, оболочку bash). компакт ${gmp_buid} и tar-Jxvf ${gmp_download}/gmp-x.X. X. деготь.xz
эти параметры смолы отличаются от того, что вы можете найти в другом месте в интернете! - Jxvf подходит для xz (и я думаю, lzip), но для gzip вы используете-xzvf.
cd gmp-x.X. Икс и беги ./конфигурация.догадка. Запишите результат. Он вам понадобится в следующий раз.
-
Run ./настроить --префикс=${gmp_build} --строить= опцией --enable-CXX по - --С-гну-ЛД
по-видимому, если вы не явно скажите GMP построить для вашей платформы он строит все, что плохо. Опция cxx создает библиотеки C++ и --with-gnu-ld позволяет ей работать с ld. Довольно простой.
сделать
-
установка
EX: предположим, вы установили C:/gmp - ... Вы должны иметь gmp / include / gmp.h и gmpxx.h. Вы также должны иметь gmp/lib / libgmp.a, libgmp.la, libgmpxx.a, libgmpxx.Ла. У вас также должен быть каталог share с материалом в он.
-
настройка eclipse:
- перейти к проекту -- > свойства
- в разделе C / C++ build -- > Environment отредактируйте переменную PATH и добавьте ${gmp_build} / include;${gmp_build} / lib
- в разделе C / C++ build --> settings --> Tool settings --> GCC Assembler --> general add ${gmp_build} / include в качестве пути включения.
- то же место, но -- > компилятор GCC C++ -- > включает add ${gmp_build} / include как include путь.
- то же место --> компилятор GCC C++ -- > разное добавить-lgmp-lgmpxx в конец строки. КОНЕЦ ОЧЕРЕДИ!
- то же место --> компилятор GCC C добавляет те же пути включения и другие параметры, что и раньше.
- то же самое место --> MinGW c++ linker --> библиотеки добавляют в "библиотеки (-l)" как gmp, так и gmpxx в этом порядке! Теперь добавьте ${gmp_build} / lib в " путь поиска библиотеки (- L)"
- В Разделе C / C++ Общие -- > Пути И Символы -- > Вкладка Incudes убедитесь, что у вас есть ${gmp_build}/include в каталогах include для Assembly, C и c++. Если их там нет, вы, возможно, испортили предыдущий шаг. Они должны быть автоматически заполнены Eclipse.
- то же место --> вкладка библиотеки проверьте, что у вас есть gmp и gmpxx в этом порядке. Он уже должен быть заселен.
- то же место --> вкладка пути библиотеки Проверьте ${gmp_build}/lib, который уже должен быть там. Нажмите "Применить" и убедитесь, что вы перестроили индекс или изменения не возьму. Нажмите OK, чтобы закрыть.
-
запустите эту короткую программу, чтобы проверить настройки:
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <gmp.h> #include <gmpxx.h> using namespace std; int main () { mpz_t p; mpz_init_set_ui (p,3); return 0; }
ваши команды компиляции должны выглядеть примерно так:
g++ "-IC:\gmp\include" -O0 -g3 -Wall -c -fmessage-length=0 -lgmp -lgmpxx -o main.o "..\main.cpp" g++ "-LC:\gmp\lib" -o GMPDebug.exe main.o -lgmp -lgmpxx
Примечания:
порядок параметров важен. Я не знаю всех причин, но если вторая командная строка (которая связывает программу) имеет флаги-lgmp-lgmpxx перед опцией-o, связывание не удастся ужасно.
флага-L-хитрому. На самом деле он говорит: "поищите в-L для liblibrary.ля." В этом случае " Go look in C:\gmp\lib для libgmp.a и libgmpxx.ля."
Я слышал об ошибках, связанных с cout и 64-битной версией eclipse, поэтому я использую 32-битную версию, где я вижу ту же ошибку. :-)
поскольку в документах библиотеки gmp есть очень маленькие примеры, я включаю пример возведения в степень для справки:
программа вычисляет 2 ^ 20000
#include <iostream>
#include <gmp.h>
using namespace std;
int main(void) {
mpz_t result, base;
mpz_inits(result,base,NULL);
mpz_set_str(base, "2", 10);
mpz_pow_ui(result, base, 20000);
mpz_out_str(stdout, 10, result);
return 0;
}
Compile:g++ -o gmp_pow_test gmp_pow_test.cpp -lgmp
Run:./gmp_pow_test
установите библиотеку gmp на Ubuntu со следующим:sudo apt-get install libgmp-dev libgmpxx4ldbl
вам нужно сказать компилятору здесь заголовок файла.
g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe
вам нужно сообщить компилятору что библиотеки вы хотите использовать.
g++ -lgmp -lgmpxx file.cpp -o file
Это, вероятно, слишком поздно, чтобы быть полезным, но...
во-первых, ваша программа работает просто отлично. Как указывали другие, вам нужно (a) убедиться, что библиотека GMP установлена (включая ее расширение gmpxx и все соответствующие файлы), и (b) что вы сообщаете компилятору, где найти как включенные файлы, так и библиотеки для связи. В моем случае файлы include находятся в /opt / local / include, а библиотеки - в /opt / local/lib (где Macports разместил их :).
вот код:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum of " << a << " and " << b << " is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";
// cin >> a;
return 0;
}
вот команда компиляции/ссылка:
clang++ -o gmpxx-tst -I/opt/local/include gmpxx-tst.cpp -L/opt/local/lib -lgmpxx -lgmp
вот что вызывает вызов gmpxx-tst:
$ ./gmpxx-tst
sum of 1234 and -5678 is -4444
absolute value is 4444
$