2015-02-09 2 views
-2

Я хочу запустить программу, которую я написал, которая использует библиотеку GMP в моей школе, однако мне нужна ваша помощь, чтобы это работало. Сама программа в порядке, но я не могу понять, как правильно включить GMP. Я использую Netbeans IDE и cygwin, программа находится в C++. Может ли кто-нибудь дать мне представление о том, как это сделать? Есть много вещей, о которых я не знаю, например:Запуск программы с GMP на школьном компьютере

  • Нужно ли компилироваться специально для этого компьютера?
  • Означает ли ОС?

Прошу прощения, если на этот вопрос уже дан ответ. Я давно искал Google, но я не могу найти ничего, даже пример из GMP.

Заранее благодарен!

Edit:

Я действительно не могу узнать, как связать это. Программа аварийно завершает работу и выгружает стек. В нем говорится: Исключение: STATUS_ILLEGAL_INSTRUCTION. В папке у меня есть cyggcc_s-seh-1.dll, cyggmp-10.dll, cygstdC++ = 6.dll, cygwin1.dll, exe, gmpxx.h, libgmp.a, libgmp.la, libgmp.lai, libgmp. libcmd, libgmpxx.a, libgmpxx.la, libgmpxx.lai, main.cpp, main.o, main.od, .dep.inc и некоторые файлы и папки, необходимые для моей программы.

Я включил ГМП и gmpxx, когда я строю это дает:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory '/cygdrive/e/Documents/NetBeansProjects/GeneticPrimesFast' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/geneticprimesfast.exe 
make[2]: Entering directory '/cygdrive/e/Documents/NetBeansProjects/GeneticPrimesFast' 
mkdir -p build/Debug/Cygwin_4.x-Windows 
rm -f "build/Debug/Cygwin_4.x-Windows/main.o.d" 
g++ -c -g -Werror -I../../GMP/gmp-6.0.0 -std=c++11 -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/main.o.d" -o build/Debug/Cygwin_4.x-Windows/main.o main.cpp 
mkdir -p dist/Debug/Cygwin_4.x-Windows 
g++  -o dist/Debug/Cygwin_4.x-Windows/geneticprimesfast build/Debug/Cygwin_4.x-Windows/main.o -lgmpxx -lgmp 
make[2]: Leaving directory '/cygdrive/e/Documents/NetBeansProjects/GeneticPrimesFast' 
make[1]: Leaving directory '/cygdrive/e/Documents/NetBeansProjects/GeneticPrimesFast' 

BUILD SUCCESSFUL (total time: 2s) 

Я довольно подчеркнул, прямо сейчас, так как мне это нужно, чтобы работать завтра. Любая помощь будет очень высоко ценится!

Edit 2:

Я пришел к выводу, что Н.М. вероятно, прав: это связано с кодом. Каковы типичные вещи, которые вызывают незаконные инструкции?

Редакция 3:

Благодарим за помощь! Я выяснил, что это связано с командой get_str в gmp (и, возможно, также get_d). Кто-нибудь знает другой способ получить строку без этой функции, или я использую ее неправильно?

Редактировать 4:

mpf_set_d также не работает. Это важно для программы. Кто-нибудь знает, как исправить это или где я ошибаюсь? Может быть, инструмент разработки, и как бы я это проверить?

+0

Я не уверен, что вы можете использовать netbeans и cygwin вместе, но с cygwin вам просто нужно установить libgmp-devel, используя собственную программу настройки cygwin. –

+0

Спасибо за ваш быстрый ответ! Я устанавливаю его сейчас. Должен ли я просто ссылаться на него, как только он будет установлен и скомпилирован? – Jelle

+0

Я нашел информацию об этом инструменте, но не знаю, как его связать.Не могли бы вы дать короткое объяснение @ n.m.? – Jelle

ответ

0

Наиболее вероятным виновником является переполнение буфера/массива где-то, где где-то перезаписывается функция или возвращаемый указатель. Позднее возвращение или вызов через поврежденный указатель перескакивают в некоторую область памяти, которая является исполняемой, но не содержит действительных инструкций, либо потому, что это данные, либо потому, что вы прыгали в середину многобайтовой команды.

Если вы использовали linux, я бы предложил valgrind для отслеживания повреждения памяти. В Windows должны существовать аналогичные инструменты.

+0

Оказывается, это mpf_get_str и mpf_get_d, которые вызывают ошибку. Когда это исключено, это работает, но мне они нужны в моей программе. Оболочка C++ тоже не работает (поскольку я уверен, что она указывает на те же функции). Вы знаете, как это исправить? Это связано с libgmp-devel? – Jelle

Смежные вопросы