Netbeans中使用C ++的GMP出错(Windows 64位)

时间:2014-10-12 22:21:03

标签: c++ windows netbeans cygwin gmp

我正在为学校做一个项目,我正在做各种不同的计算,包括素数。这些数字往往相当大,因此我去寻找一个任意精度库。因为我之前在Game Maker(一个相对未知的程序)中使用它,所以我决定选择GMP,因为有人为它制作了一个dll。

现在,我已按照安装手册继续编译GMP。我很难做到这一点,因为我对UNIX和cygwin完全不熟悉。既然我已经尝试将gmpxx.h包含在Netbeans中用于测试程序,那么事情就出错了。我的代码如下:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <gmpxx.h>
#include <stdarg.h>

using namespace std;

int main()
{
    mpz_t a;
    mpz_init(a);
    //cout << mpz_probab_prime_p(a,20);
    mpz_clear(a);
}

对于mpz_init和mpz_clear,我收到同样的错误:

  

重定位被截断以适合:R_X86_64_PC32对未定义的符号'__gmpz_ [init / clear]'

我只是猜测,但问题可能是以下任何一种情况:

  • 错误编译
  • 错误代码
  • 错误包含/链接

它很可能是后者,虽然我已经尝试为头文件等添加目录。我该如何解决这个错误?

提前致谢!

修改 由于这是我的第一篇文章,您是否可以指出我需要澄清的内容,以使此问题得到回答?

EDIT2: 这是Netbeans中的编译日志:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/firsttestgmp.exe
make[2]: Entering directory '/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP'
mkdir -p dist/Debug/Cygwin_4.x-Windows
g++ -Lpath/to/gmp/lib -lgmpxx -lgmp    -o dist/Debug/Cygwin_4.x-Windows/firsttestgmp build/Debug/Cygwin_4.x-Windows/main.o 
build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP/main.cpp:22: undefined reference to `__gmpz_init'
/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP/main.cpp:22:(.text+0x15): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__gmpz_init'
/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP/main.cpp:24: undefined reference to `__gmpz_clear'
/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP/main.cpp:24:(.text+0x21): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__gmpz_clear'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:62: recipe for target 'dist/Debug/Cygwin_4.x-Windows/firsttestgmp.exe' failed
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/firsttestgmp.exe] Error 1
make[2]: Leaving directory '/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP'
nbproject/Makefile-Debug.mk:59: recipe for target '.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory '/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)

EDIT3: 正如@rubenvd指出的那样,真正的错误是:

build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/e/Documents/NetBeansProjects/FirstTestGMP/main.cpp:22: undefined reference to `__gmpz_init'

2 个答案:

答案 0 :(得分:0)

链接库在包含对它们的引用的对象文件之后非常重要。所以你的编译命令需要是:

g++ -o dist/Debug/Cygwin_4.x-Windows/firsttestgmp build/Debug/Cygwin_4.x-Windows/main.o -lgmpxx -lgmp

如果您在非标准位置安装了GMP(似乎并非如此),则需要使用-L选项将路径添加到库目录。

答案 1 :(得分:0)

谢谢大家!我通过以下方式修复了我的问题: 属性&gt;构建&gt;链接器&gt;图书馆&gt;添加库 然后添加gmp.a和gmpxx.a,我在我编译的gmp目录中找到了它。