Вот правильная процедура установки текущих (по состоянию на 02.07.13) библиотек GNU bignum с Eclipse CDT, MinGW и msys для C++. Чтобы пройти через это, вы должны были раньше использовать Unix или Linux, а также Windows, и у вас должны быть смутные воспоминания о программировании и компиляции программ. Это кульминация более чем недели исследований и жесткого разочарования, поэтому, если я что-то напутал, вежливо отметьте это, иначе я взорву вас силой своего разума!
1) Я предполагаю, что вы уже загрузили и установили Eclipse и MinGW и установили msys в MinGW. Вы должны установить MinGW перед msys!
2) Загрузите архив библиотек GMP с сайта gmplib.org в папку ${gmp_download}. Я скачал gmp-5.1.2.tar.xz, потому что никогда не использовал lzip и не знал, доступен ли он в msys.
3) Откройте окно msys (по сути, оболочку bash). cd ${gmp_buid} и tar -Jxvf ${gmp_download}/gmp-x.x.x.tar.xz
Эти параметры tar отличаются от того, что вы можете найти в других местах в Интернете! -Jxvf подходит для xz (и я думаю, что lzip), но для gzip вы используете -xzvf.
4) cd gmp-x.x.x и запустить ./config.guess. Запишите вывод. Он понадобится вам дальше.
5) Запустите ./configure --prefix=${gmp_build} --build=‹config.guess output› --enable-cxx --with-gnu-ld
По-видимому, если вы явно не укажете GMP собирать для вашей платформы, он создаст все, что плохо. Параметр cxx создает библиотеки C++, а --with-gnu-ld позволяет ему работать с ld. Довольно просто.
6) делать
7) сделать установку
ПРИМЕР: предположим, что вы установили в C:/gmp. У вас должны быть gmp/include/gmp.h и gmpxx.h. Вы также должны иметь gmp/lib/libgmp.a, libgmp.la, libgmpxx.a, libgmpxx.la. У вас также должен быть общий каталог с вещами в нем.
8) Настройте затмение:
- Перейти к проекту --> свойства
- В разделе C/C++ build --> Environment отредактируйте переменную PATH и добавьте ${gmp_build}/include;${gmp_build}/lib
- В сборке C/C++ --> настройки --> настройки инструмента --> ассемблер GCC --> общие добавьте ${gmp_build}/include в качестве пути включения.
- То же место, но --> компилятор GCC C++ --> включает добавление ${gmp_build}/include в качестве пути включения.
- Там же --> Компилятор GCC C++ --> Разное добавьте -lgmp -lgmpxx в КОНЕЦ строки. КОНЕЦ ЛИНИИ!
- Там же --> компилятор C GCC. Добавьте те же пути включения и разные параметры, что и раньше.
- Там же --> Компоновщик MinGW C++ --> Библиотеки Добавьте в "Библиотеки (-l)" как gmpxx, так и gmp В ТАКОМ ПОРЯДКЕ! Теперь добавьте ${gmp_build}/lib в «Путь поиска библиотеки (-L)».
- В C/C++ General --> Paths & Symbols --> вкладка Incudes убедитесь, что у вас есть ${gmp_build}/include в ваших включаемых каталогах для Assembly, C и C++. Если их нет, добавьте их. Возможно, они уже заполнены Eclipse.
- Там же --> вкладка "Библиотеки" убедитесь, что у вас есть gmp и gmpxx В ЭТОМ ПОРЯДКЕ. Он уже должен быть заселен.
- То же место --> Вкладка "Пути к библиотекам" Проверьте ${gmp_build}/lib, которая уже должна быть там.
- Нажмите «Применить» и убедитесь, что вы перестроили индекс, иначе изменения не вступят в силу. Нажмите OK, чтобы закрыть.
9) Запустите эту короткую программу, чтобы проверить ваши настройки:
#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 -lgmpxx -lgmp
Примечания:
1) Порядок вариантов важен. Я не знаю всех причин, но если вторая командная строка (связывающая программу) имеет флаги -lgmp -lgmpxx перед опцией -o, связывание с треском провалится.
2) Флаг -l хитрый. На самом деле он говорит: «Иди и поищи в -L‹что угодно› liblibrary.a». В этом случае "Поищите в C:\gmp\lib libgmp.a и libgmpxx.a".
3) Я слышал об ошибках, связанных с cout и 64-битной версией eclipse, поэтому я использую 32-битную версию, где вижу ту же ошибку. :-(
4) Если вы поместите gmp перед gmpxx в компоновщике, ваши перегруженные операторы не будут работать.
person
cassius
schedule
03.07.2013