尝试使用 boost 库时缺少 gmp.h

Posted

技术标签:

【中文标题】尝试使用 boost 库时缺少 gmp.h【英文标题】:gmp.h missing when trying to use boost library 【发布时间】:2018-02-02 17:47:56 【问题描述】:

我正在尝试在 Windows 上使用带有 QT 的 boost 库。我已经成功地构建了这个库,并且还设法将它包含在我的项目中。但是,在包含 gmp (#include "boost/multiprecision/gmp.hpp") 和创建对象 (boost::multiprecision::mpz_int myint;) 时出现以下错误:

C:\Users\Laurenz\Documents\libraries\boost_1_66_0\include\boost\multiprecision\gmp.hpp:31: error: gmp.h: No such file or directory

确实,我无法在 boost 目录中找到任何此类文件。我做错了什么?

【问题讨论】:

您需要安装gmp。它不是 boost 库的一部分。有关详细信息,请参阅,例如,***.com/q/16049726 好的,我刚刚下载了它...但是我现在究竟要移动 gmp.h 到哪里? 这不仅仅是将 gmp.h 文件放在适当的位置。您必须安装整个 gmp 库,就像必须安装 boost 库一样。如果正确完成,系统应该找到该文件,可能在定义一些环境变量之后。我认为关于如何为给定操作系统安装和使用 gmp 的说明并不难找到;通过在 SO 上搜索相应的问题或通过您最喜欢的搜索引擎。 好的,我明白了。而且我认为我设法成功安装了它,因为现在我不再收到此错误。但是,不,我收到消息C:\Users\Laurenz\Documents\libraries\boost_1_66_0\include\boost\multiprecision\gmp.hpp:1041: error: undefined reference to __gmpz_init'`。我在互联网上搜索过,还有其他人遇到了同样的问题,但建议的解决方案似乎都不适合我。知道什么可以解决吗? 【参考方案1】:

安装依赖并链接到它。 (见What is an undefined reference/unresolved external symbol error and how do I fix it?)

或者,考虑使用 GMP,而是使用 cpp_int.hpp


由于您已经安装了 GMP 库,所以这是最后一步:

Live On Coliru

#include <boost/multiprecision/gmp.hpp>
#include <iostream>

int main() 
    boost::multiprecision::mpz_int i("1238192389824723487823749827349879872342834792374897923479");

    std::cout << pow(i, 3) << "\n";

注意编译/链接命令末尾-lgmp标志:

g++ -std=c++11 -O2 -Wall -Wextra -pedantic main.cpp -o demo -lgmp

运行它:

./demo
1898298004808110659499396020993351679788129852647955073547637871096272981567489303363372689896302906549189545322451852317205769760555889831589125591739044248515246136031239

【讨论】:

以上是关于尝试使用 boost 库时缺少 gmp.h的主要内容,如果未能解决你的问题,请参考以下文章

vs2017使用gmp类库时输入输出符号无法解析外部符号

缺少来自未知路径的 boost 文件

错误“找不到 Boost”(缺少:上下文标头)

尝试使用 Boost 序列化库时出错

我对 boost::mpi::request 缺少啥?测试似乎改变了状态

BOOST_STATIC_ASSERT_MSG - 缺少错误信息