我正在为学校做一个项目,我正在做各种不同的计算,包括素数。这些数字往往相当大,因此我去寻找一个任意精度库。因为我之前在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'
答案 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目录中找到了它。