2015-02-09 35 views
-2

我想运行我在学校使用GMP库编写的程序,但是我需要您的帮助才能使其工作。程序本身没问题,但我不知道如何正确包含GMP。我正在使用Netbeans IDE和cygwin,该程序在C++中。任何人都可以告诉我如何做到这一点?有很多东西我不确定,例如:使用GMP在学校计算机上运行程序

  • 我需要为该计算机专门编译吗?
  • 操作系统是否重要?

对不起,如果这是问题已经回答了某个地方。我已经搜索了一段时间,但似乎找不到任何东西,甚至没有GMP本身的例子。

提前致谢!

编辑:

我真的无法找出如何链接此。该程序立即崩溃并转储堆栈跟踪。它说:例外: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以及我的程序所需的一些文件和文件夹。

我已经包含了GMP和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) 

我很强调,现在,因为我需要这个,明天上班。任何帮助将非常感谢!

编辑2:

我得出的结论是,可能是正确的:它与代码有关。什么是导致非法指示的典型事情?

编辑3:

感谢您的帮助!我发现它与gmp(也可能是get_d)中的get_str命令有关。有没有人知道没有这个功能获得一个字符串的另一种方式,或者我使用它错了吗?

编辑4:

mpf_set_d也不起作用。这是该计划的基础。有谁知道如何解决这个问题或我哪里出错?也许是开发工具,我将如何检查?

+0

我不确定你可以一起使用netbeans和cygwin,但对于cygwin你只需要使用cygwin自己的安装程序来安装libgmp-devel。 – 2015-02-09 16:51:17

+0

感谢您的快速回复!我正在安装它。在完成安装和编译之后,我是否正常链接它? – Jelle 2015-02-09 17:03:33

+0

我发现了有关该工具的信息,但我不知道如何链接它。你可能会在下午作一个简短的解释吗? – Jelle 2015-02-09 18:38:53

回答

0

最有可能的罪魁祸首是缓冲区/数组溢出某处覆盖函数或返回指针的地方。稍后通过损坏的指针返回或调用跳转到某个可执行但不包含有效指令的内存区域,可能是因为它是数据,或者是因为您跳入了多字节指令的中间。

如果您使用的是Linux,我会建议valgrind来追踪内存损坏情况。 Windows上必须存在类似的工具。

+0

原来是mpf_get_str和mpf_get_d导致错误。当它被忽略时,它可以工作,但我需要它们在我的程序中。 C++ wrapper也不起作用(因为我很确定它指向相同的函数)。你知道如何解决这个问题吗?这是否与libgmp-devel有关? – Jelle 2015-02-10 19:57:19

相关问题