尝试使用 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的主要内容,如果未能解决你的问题,请参考以下文章