使用GMP库时遇mpz_prevprime未定义引用及隐式声明问题
GMP 6.3.0中
mpz_prevprime函数未定义的问题解决 问题现象
编译使用GMP库的C代码时,出现以下错误:
warning: implicit declaration of function ‘mpz_prevprime’; did you mean ‘mpz_nextprime’? [-Wimplicit-function-declaration] undefined reference to `mpz_prevprime' collect2: error: ld returned 1 exit status
已完成的操作:
- 通过MSYS编译安装GMP 6.3.0,步骤如下:
cd gmp_folder ./configure make make check make install - C代码中已包含头文件
#include <gmp.h> - Makefile中配置了
LDFLAGS = -lm -lgmp
异常点:编译器可以正常识别mpz_nextprime等其他GMP函数,但无法找到mpz_prevprime。
环境信息
Makefile内容
CC = gcc CFLAGS = -Wall -g LDFLAGS = -lm -lgmp INCLUDES = -I./ SRCS = ./*.c MAIN = cryptography.exe all: $(MAIN) $(MAIN): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $(MAIN) $(LDFLAGS) clean: rm ./cryptography.exe
文件夹结构
主文件夹 ├─ 自定义C文件(源文件及头文件) ├─ Makefile └─ gmp子文件夹 └─ GMP库文件
问题根源与解决方案
问题根源
系统中预先存在其他版本的GMP库,编译时GCC优先调用了系统自带的旧版本GMP库,而旧版本中没有mpz_prevprime函数(该函数是较新版本GMP新增的)。
解决方案
修改Makefile中的LDFLAGS,指定自行编译的GMP库路径,让编译器链接到正确的GMP 6.3.0版本:
将
LDFLAGS = -lm -lgmp
修改为
LDFLAGS = -lm -L./gmp_subfolder/.libs -lgmp
重新执行make编译,问题即可解决。
内容的提问来源于stack exchange,提问作者user12312425
相关产品推荐
相关产品推荐

