【发布时间】:2015-05-16 18:58:20
【问题描述】:
我正在尝试在 Cygwin 上编译这个简单的 GMP 程序:
#include <gmp.h>
int main(){
mpz_t i;
mpz_init(i);
}
这是命令:
gcc -lgmp test.c
我收到此错误:
/tmp/ccJpGa7K.o:test.c:(.text+0x17): undefined reference to `__imp___gmpz_init'
/tmp/ccJpGa7K.o:test.c:(.text+0x17): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp___gmpz_init'
collect2: error: ld returned 1 exit status
知道有什么问题吗?我知道它可以找到库(libgmp.dll.a),但它似乎没有找到函数。
nm /usr/lib/libgmp.dll.a | grep mpz_init 的输出:
0000000000000000 T __gmpz_inits
0000000000000000 I __imp___gmpz_inits
0000000000000000 T __gmpz_init_set_ui
0000000000000000 I __imp___gmpz_init_set_ui
0000000000000000 T __gmpz_init_set_str
0000000000000000 I __imp___gmpz_init_set_str
0000000000000000 T __gmpz_init_set_si
0000000000000000 I __imp___gmpz_init_set_si
0000000000000000 T __gmpz_init_set_d
0000000000000000 I __imp___gmpz_init_set_d
0000000000000000 T __gmpz_init_set
0000000000000000 I __imp___gmpz_init_set
0000000000000000 T __gmpz_init2
0000000000000000 I __imp___gmpz_init2
0000000000000000 T __gmpz_init
0000000000000000 I __imp___gmpz_init
我在没有 grep 的情况下尝试了它,并且由于某种原因,其中的每个符号都有地址 0。
【问题讨论】:
-
您是如何安装 GMP 的?使用
nm libgmp.dll.a|grep mpz_init也可以提供一些信息。 -m32 或 -m64 效果更好吗? -
我将 nm 输出添加到我的问题中。 -m32 完全破坏了它, -m64 给出了相同的结果。但是,这样做使它起作用:
gcc test.c /usr/bin/cyggmp-10.dll。不知道为什么。
标签: gcc compiler-errors cygwin gmp