尝试在C ++中生成质数时GMP中的链接错误

问题描述

我正在尝试编写一个简单的程序,作为更大项目的一部分,该程序会在GMP中生成大质数,到目前为止,我已经草绘了以下函数:

primes.cpp

#include"primes.h"

void random_prime(mpz_t result){ 
    gmp_randstate_t state;
    mpz_t prime;

    mpz_init(prime); 
    gmp_randinit_default(state);

    mpz_set(result,prime); 
    mpz_clear(prime); 
    gmp_randclear(state);
}

primes.h

#include<iostream>
#include<gmp.h>

using namespace std;

void random_prime(mpz_t resultado);

它被这样编译

CC = g++

all: link

primes:
    ${CC} -c primes.cpp -lgmpxx -lgmp

main: primes ...
    ${CC} -Wall main.cpp -c -lgmpxx -lgmp

link: main
    ${CC} -o main primes.o ...

运行“链接”行后,我得到了这些错误:

primes.o: In function `random_prime(__mpz_struct*)':
primes.cpp:(.text+0x23): undefined reference to `__gmpz_init'
primes.cpp:(.text+0x2f): undefined reference to `__gmp_randinit_default'
primes.cpp:(.text+0x42): undefined reference to `__gmpz_set'
primes.cpp:(.text+0x4e): undefined reference to `__gmpz_clear'
primes.cpp:(.text+0x5a): undefined reference to `__gmp_randclear'

我已经阅读了几次手册,但无济于事,我还在SO和其他论坛上找到了一些相关问题,但没有帮助。最后,我尝试两次重新安装该库,但这也没有帮助。

任何帮助将不胜感激。

解决方法

链接 时使用-l选项,而不编译单个.cpp文件。

link: main
    ${CC} -o main primes.o ...  -lgmpxx -lgmp

并在其他任何地方摆脱-l选项。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...