我想在我的学校运行我编写的使用GMP库的程序,但是我需要你的帮助才能让它工作。程序本身没问题,但我无法弄清楚如何正确地包含GMP。我使用的是Netbeans IDE和cygwin,程序是用c ++编写的。任何人都可以告诉我如何做到这一点?有很多我不确定的事情,例如:
如果这个问题已在某个地方得到解答,我很抱歉。我用google搜索了一段时间,但我似乎找不到任何东西,甚至没有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:
我得出的结论是,n。可能是对的:它与代码有关。什么是导致非法指示的典型事情?
编辑3:
感谢您的帮助!我发现它与gmp(也可能是get_d)中的get_str命令有关。有没有人知道在没有这个功能的情况下获取字符串的另一种方式,或者我使用它错了吗?
编辑4:
mpf_set_d也不起作用。这对该计划至关重要。有谁知道如何解决这个或我出错的地方?也许是开发工具,我该如何检查?
答案 0 :(得分:0)
最可能的罪魁祸首是某处覆盖某个函数或返回指针的缓冲区/数组溢出。稍后返回或通过损坏的指针调用会跳转到某个可执行但不包含有效指令的内存区域,因为它是数据或因为您跳转到多字节指令的中间。
如果您使用的是Linux,我建议使用valgrind来追踪内存损坏情况。 Windows上必须存在类似的工具。