С++ программа с использованием библиотеки 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.cpp -o test.exe, он говорит gmpxx.h: нет такого файла или каталога.
Как я могу это исправить? Я как бы новичок в этом. И я использую MinGW.
Ответы
Ответ 1
Получить фактическую версию здесь Библиотека GMP GMP. Убедитесь, что вы настроили его для установки в /usr/lib (pass -prefix =/usr для настройки).
Здесь у вас есть документация: Руководство GNU GMP.
Вы не используете lib правильно. Я не знаю, можете ли вы напрямую получать доступ к значениям mpx
с функциями С++, но здесь у вас есть рабочий пример того, чего вы хотели достичь:
#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
Ответ 2
Вот правильная процедура для настройки текущих (по состоянию на 7/2/13) библиотек GNU bignum с Eclipse CDT, MinGW и msys для С++. Чтобы пройти через это, вы должны были использовать Unix или Linux раньше, а также Windows, и у вас должно быть смутное воспоминание о программировании и компиляции программ. Это кульминация более недели исследований и хардкорных разочарований, поэтому, если я что-то испортил, заметьте это вежливо, или я взорву вас силой своего ума!
-
Я предполагаю, что вы уже загрузили и установили Eclipse и MinGW и установили msys в MinGW. Вы должны установить MinGW до msys!
-
Загрузите tarball для библиотек GMP с gmplib.org на ${gmp_download}. Я загрузил gmp-5.1.2.tar.xz, потому что я никогда не использовал lzip и не знал, был ли он доступен в msys.
-
Откройте окно msys (в основном оболочку bash). cd ${gmp_buid} и tar -Jxvf ${gmp_download}/gmp-x.x.x.tar.xz
Эти параметры tar отличаются от того, что вы можете найти в другом месте в Интернете! -Jxvf подходит для xz (и я думаю, lzip), но для gzip вы используете -xzvf.
-
cd gmp-x.x.x и запустите. /config.guess. Запишите выход. Он вам понадобится.
-
Запустить./configure --prefix = ${gmp_build} --build = --enable-cxx --with-gnu-ld
По-видимому, если вы явно не укажете GMP на сборку своей платформы, он строит все, что плохо. Опция cxx создает библиотеки С++, и --with-gnu-ld позволяет работать с ld. Довольно просто.
-
сделать
-
сделать установку
EX: предположим, что вы установили в C:/gmp. Вы должны иметь gmp/include/gmp.h и gmpxx.h. Вы также должны иметь gmp/lib/libgmp.a, libgmp.la, libgmpxx.a, libgmpxx.la. У вас также должна быть папка с общим доступом.
-
Настройка затмения:
- Перейти к проекту → свойства
- В C/С++ build → Environment отредактируйте переменную PATH и добавьте ${gmp_build}/include; ${gmp_build}/lib
- В настройках C/С++ build → - > tool → GCC Assembler → general add ${gmp_build}/include в качестве пути включения.
- То же место, но → Компилятор GCC С++ → Включает add ${gmp_build}/include как путь включения.
- В том же месте → Компилятор GCC С++ → Добавить add -lgmp -lgmpxx в конец END строки. КОНЕЦ ЛИНИИ!
- То же место → Компилятор GCC C Добавьте те же самые пути включения и другие параметры, что и раньше.
- То же место → MinGW С++ linker → Библиотеки Добавить в "Библиотеки (-l)" и gmp и gmpxx В ЭТОМ ЗАКАЗЕ! Теперь добавьте ${gmp_build}/lib в "LIbrary Search Path (-L)"
- В разделе C/С++ General → Paths and Symbols → Incudes Tab проверьте, что у вас есть ${gmp_build}/include в ваших каталогах include для сборки, C и С++. Если их нет, вы, возможно, испортили более ранний шаг. Они должны быть автоматически заполнены Eclipse.
- В том же месте → вкладка "Библиотеки" проверьте, что у вас есть gmp и gmpxx в этом заказе. Он уже должен быть заполнен.
- То же место → вкладка "Пути к библиотеке" Проверьте наличие ${gmp_build}/lib, которое должно быть уже там.
Нажмите "Применить" и убедитесь, что вы перестроили индекс, иначе изменения не будут приняты. Нажмите ОК, чтобы закрыть.
-
Запустите эту короткую программу, чтобы проверить вашу настройку:
#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.a". В этом случае "Go посмотрите в C:\gmp\lib для libgmp.a и libgmpxx.a".
-
Я слышал о ошибках, связанных с cout и 64-разрядной версией eclipse, поэтому я использую 32-разрядную версию, где я вижу ту же ошибку.: -)
Ответ 3
Поскольку в 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
Запуск: ./gmp_pow_test
Установите библиотеку gmp на Ubuntu со следующими параметрами: sudo apt-get install libgmp-dev libgmpxx4ldbl
Ответ 4
Вам нужно сообщить компилятору, где находится файл заголовка.
g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe
Ответ 5
Вам нужно сообщить компилятору, какие библиотеки вы хотите использовать.
g++ -lgmp -lgmpxx file.cpp -o file
Ответ 6
Возможно, слишком поздно быть полезным, но...
Во-первых, ваша программа работает нормально. Как указывалось другими, вам необходимо (а) обеспечить, чтобы библиотека GMP была установлена (включая расширение gmpxx и все соответствующие файлы), и (b) что вы сообщаете компилятору, где найти как включенные файлы, так и библиотеки для связи.
В моем случае включенные файлы находятся в /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
$