我已经使用最新版本的 Emscripten 尝试了此处的说明:https : //github.com/kripken/gmp.js/blob/master/README.markdown
.a 文件似乎已正确创建。然后我尝试针对该库进行编译(在调试模式下),这似乎有效:
emcc invocation: /home/marcosscriven/sources/emscripten/emcc -O0 --closure 0 test.c .libs/libgmp.a -o complete.js
(Emscripten: Running sanity checks)
emcc: compiling to bitcode
emcc: compiling source file: test.c
emcc running: /usr/local/bin/clang -m32 -U__i386__ -U__x86_64__ -U__i386 -U__x86_64 -Ui386 -Ux86_64 -U__SSE__ -U__SSE2__ -U__MMX__ -UX87_DOUBLE_ROUNDING -UHAVE_GCC_ASM_FOR_X87 -DEMSCRIPTEN -U__STRICT_ANSI__ -U__CYGWIN__ -D__STDC__ -Xclang -triple=i386-pc-linux-gnu -D__IEEE_LITTLE_ENDIAN -fno-math-errno -fno-ms-compatibility -nostdinc -Xclang -nobuiltininc -Xclang -nostdsysteminc -Xclang -isystem/home/marcosscriven/sources/emscripten/system/local/include -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/emscripten -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/bsd -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/libc -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/libcxx -Xclang -isystem/home/marcosscriven/sources/emscripten/system/lib/libcxxabi/include -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/gfx -Xclang -isystem/home/marcosscriven/sources/emscripten/system/include/net …Run Code Online (Sandbox Code Playgroud) 我试图在我的 Mac (OS X 10.8.4) 上安装“bigfloat”包,但遇到了一些问题。包“bigfloat”需要另外两个依赖项:1) mpfr 和 2) gmp。
我在这里安装了 gmp: http: //gmplib.org/ <-- 这似乎工作正常。
但安装 mpfr 并不那么容易(http://www.mpfr.org/mpfr-current/mpfr.html#Installing-MPFR)。他们说只需 ./configure、make 和 make install 即可使其运行,但我收到此错误:
checking for gmp.h... no
configure: error: gmp.h can't be found, or is unusable.
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了一下,人们建议在配置命令中指定路径,但到目前为止我还没有运气。任何帮助,将不胜感激!
作为参考,我正在查看 mpfr-3.1.2 (位于目录:/Users/myusername)和 gmp-5.1.2 (位于同一目录)。
谢谢!
我尝试在我的 Windows 7 64 位计算机上构建 GMP,所以我运行config.guess并获取k10-pc-msys. (我使用 msys2 和 mingw64)
然后我跑了
./configure --prefix=/c/gmp-6.1.0 --build=k10-pc-msys --enable-cxx
Run Code Online (Sandbox Code Playgroud)
但这会因此错误而退出
Run Code Online (Sandbox Code Playgroud)checking size of mp_limb_t... 4 configure: error: Oops, mp_limb_t is 32 bits, but the assembler code in this configuration expects 64 bits.
所以我再次运行了配置ABI=64(考虑强制mp_limb_t为 64 位),但这以相同的错误结束。在此之后,我尝试添加CC="g++"(思考--enable-cxx需求g++),但我再次收到此错误。
我在谷歌上搜索了很多,发现在 GitHub 上向juliaLang报告的一个问题看起来很接近我的问题,但该解决方案似乎对我不起作用,因为我没有使用 Julia。
有谁知道这个错误并找到了解决它的方法?
注意:我看到 msys2 已经安装,我可以使用它。但是我的程序的运行时间仅通过使用 msys2 安装的 GMP 构建 NTL 就增加了大约 70%。我认为这是因为它不是为我的计算机构建的,所以它根本没有优化。
编辑:即使没有任何设置(只是./configure …
虽然我正在使用gmp.h头文件.我需要一个函数,它接受mpz_t类型的输入并返回mpz_t类型.我是使用gmp.h的初学者.所以,这里是我接近的代码的快照...
mpz_t sum_upto(mpz_t max)
{
mpz_t sum;
mpz_init(sum);
mpz_init(result);
for(int i=0;i<=max-1;i++)
mpz_add_ui(sum,sum,pow(2,i));
return sum;
}
Run Code Online (Sandbox Code Playgroud)
但它会显示错误:
我是Apple的Xcode的完全初学者,但我已经遵循Xcode文档和一些相关问题的建议而没有成功.
我将GMP安装到/ usr/local/bin,使用该库编写了一个简短的程序,并使用gcc main.c -lgmp.它编译时没有任何警告或错误,并且可执行文件完美无缺.
我启动了一个新的Xcode项目(命令行工具;类型:C),将代码复制到新创建的main.c,并打开项目构建设置.从那里,我设置链接>其他链接器标记以-lgmp与搜索路径>库搜索路径来/usr/local/bin.但是,构建失败,预处理程序错误"Gmp.h:没有这样的文件或目录".
我已经尝试了几乎所有可以想象的标题:
#include "gmp.h"
#include <gmp.h>
#include "gmp"
#include "libgmp.a"...
这是我过去三个月的主要障碍,这使我无法学习C.任何有助于我最终解决方案的帮助将不胜感激.
在GMP手册的整数部分:
功能:void mpz_clear(mpz_t x)
释放x占用的空间.完成后,为所有mpz_t变量调用此函数.
调用此过程会减慢我的程序,所以如果没有必要,我宁愿不这样做.
问题:如果我不使用mpz_clear会发生什么?
我的猜测是内存泄漏可能会发生.虽然,我不确定我是否应该关注这个问题(例如C可能会为我清理它,或者当程序退出时可能会返回内存).
$ apt-cache show libgmp10
Package: libgmp10
...
Version: 2:5.0.2+dfsg-2ubuntu2
Run Code Online (Sandbox Code Playgroud)
test.cpp:
#include <gmpxx.h>
#include <iostream>
using namespace std;
int main()
{
mpz_class x = 42;
cout << x;
}
Run Code Online (Sandbox Code Playgroud)
编译:
$ g++ -c test.cpp -o test.o
$
Run Code Online (Sandbox Code Playgroud)
好
链接:
$ g++ test.o -lgmp
test.o: In function `std::ostream& operator<<
<__mpz_struct [1]>(std::ostream&,
__gmp_expr<__mpz_struct [1],
__mpz_struct [1]> const&)':
test.cpp:(.text._ZlsIA1_12__mpz_structERSoS2_RK10__gmp_exprIT_S4_E[_ZlsIA1_12__mpz_structERSoS2_RK10__gmp_exprIT_S4_E]+0x2a):
undefined reference to `operator<<(std::ostream&, __mpz_struct const*)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
它operator<<(ostream&, mpz_class)在链接时找不到.是什么赋予了?
我在C中使用GMP库获得任意精度.我见过的所有用法示例似乎都避免了自我分配,例如:
Syntax : void mpz_add (mpz_t rop, const mpz_t op1, const mpz_t op2)
mpz_add(a, a, b); // Assign a+b to a
Run Code Online (Sandbox Code Playgroud)
这种用法是允许的,还是应该只分配给第三个变量?
我试图在CentOS上安装GMP,出现此错误:
yumdownloader --source gmp
Enabling mysql-tools-community-source repository
Enabling mysql-connectors-community-source repository
Enabling mysql56-community-source repository
Loading mirror speeds from cached hostfile
* base: centos.mirrors.ovh.net
* epel: nl.mirror.babylon.network
* epel-source: nl.mirror.babylon.network
* extras: centos.mirrors.ovh.net
* updates: centos.mirrors.ovh.net
No source RPM found for gmp-4.3.1-10.el6.x86_64
No source RPM found for gmp-4.3.1-10.el6.i686
Nothing to download
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
根据GMP的手册,“用于整数算术的函数假定所有整数对象均已初始化。您可以通过调用函数mpz_init来实现。”
例如,
int main(){
mpz_t n1, n2, result;
mpz_init_set_str(n1, "465860", 10);
mpz_init_set_str(n2, "167", 10);
mpz_init(result);
mpz_mod(result, n1, n2);
mpz_out_str(stdout, 10, result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果mpz_init(result);从上面的代码中删除,则编译器将产生分段错误错误。所以,我的问题,究竟是这两个类型定义的区别:mpz_t result和mpz_init(result)。为什么mpz_init还需要?