标签: gmp

使用Visual Studio构建GMP库?

有没有一种简单的方法可以在Windows下使用Visual Studio 2005 构建GMP(GNU多精度算术库,http://gmplib.org)?我试图找到有关自己构建库的信息,但找不到任何真正帮助我的东西.我自己建立图书馆的经验不是很丰富(我已经设法建立了提升,但就是这样).

还是有一个我不知道的稳定(预建)GMP发行版?

MPIR是一个有效的替代方案(http://www.mpir.org)吗?关于GMP网站上的MPIR的评论:对于一些Windows用户来说,这个"愤怒的GMP分叉"可能是真正的GMP的替代品,但他们必须处理大量的反GMP情绪.

编辑: MPFR C++包装页面包含指向Visual Studio的GMP/MPFR解决方案的信息/链接以及编译的gmp/mpfr库:http: //www.holoborodko.com/pavel/mpfr/

c++ visual-studio-2005 build mpfr gmp

9
推荐指数
1
解决办法
3万
查看次数

未定义引用`__imp___gmpz_init',在Cygwin上构建GMP程序

我正在尝试在Cygwin上编译这个简单的GMP程序:

#include <gmp.h>

int main(){
    mpz_t i;
    mpz_init(i);
}
Run Code Online (Sandbox Code Playgroud)

这是命令: gcc -lgmp test.c

我收到此错误:

/tmp/ccJpGa7K.o:test.c:(.text+0x17): undefined reference to `__imp___gmpz_init'
/tmp/ccJpGa7K.o:test.c:(.text+0x17): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp___gmpz_init'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

知道什么是错的吗?我知道它可以找到库(libgmp.dll.a),但似乎没有找到该函数.

产量nm /usr/lib/libgmp.dll.a | grep mpz_init:

0000000000000000 T __gmpz_inits
0000000000000000 I __imp___gmpz_inits
0000000000000000 T __gmpz_init_set_ui
0000000000000000 I __imp___gmpz_init_set_ui
0000000000000000 T __gmpz_init_set_str
0000000000000000 I __imp___gmpz_init_set_str
0000000000000000 T __gmpz_init_set_si
0000000000000000 I __imp___gmpz_init_set_si
0000000000000000 T __gmpz_init_set_d
0000000000000000 I __imp___gmpz_init_set_d
0000000000000000 T __gmpz_init_set
0000000000000000 I __imp___gmpz_init_set …
Run Code Online (Sandbox Code Playgroud)

gcc cygwin compiler-errors gmp

9
推荐指数
1
解决办法
1万
查看次数

如何在OS X上启用PHP中的GMP?

使用OS X 10.11.1(El Capitan)和PHP 5.5.29.

我想在我的PHP中添加GMP扩展,但我不知道这样做.根据PHP手册,我认为编译PHP有一个--with-gmp=dir选项.但我不知道如何编译PHP(我怀疑我是否在这台机器上做过,iirc默认情况下它只是带有PHP),而且我也不知道用于该--with-gmp=选项的dir是什么.

我确实有自制软件,我注意到一个相当旧的类似问题,但似乎不起作用(软件包不再可用).

我注意到在酿造中有一些东西叫做homebrew/php/php55-gmp但是暗示了什么brew tap.我不知道那是什么,我宁愿不要弄乱我的Homebrew配置或我的整个开发环境(我想这不太可能,但我不知道当我弄乱这个水龙头时我正在对我的系统做什么).

php macos gmp osx-elcapitan

9
推荐指数
1
解决办法
6417
查看次数

使用GHC,在用户空间安装GMP的cabal

我一直在尝试安装Haskell平台,并cabal-install在没有安装GNU Multi-Precision软件包(GMP)的系统上在用户空间的Linux上安装.

我设法安装了GHC-6.12.1并且GHCi通过设置LB_LIBRARY_PATH指向我安装GMP的lib目录cabal-install来工作,但是在下一步遇到问题,开始工作.它一直试图(静态地)链接到GMP.

这失败是因为GMP没有安装在系统中并且ld没有找到库的位置,并且没有环境变量(我知道)可以告诉ld在哪里可以找到用户安装的GMP,以及(显然)没有办法告诉配置Cabal提供相关-L标志.

经过多次徒劳无功的搜索和黑客攻击后,我找到了一个荒谬的简单想法,即安装我自己的ldshell脚本,调用ld具有相应-L标志的系统.

这是shell脚本101,当然:

#!/bin/sh
/usr/bin/ld -L$HOME/gnu/lib "$@"
Run Code Online (Sandbox Code Playgroud)

有了这个脚本安装在我PATH之前的目录中/usr/bin所有的问题似乎已经消失了.

haskell gmp ghc cabal haskell-platform

8
推荐指数
1
解决办法
1174
查看次数

关于typedef中单实例数组的一些问题

我正在使用GNU Multi-Precision(GMP)库代码使用任意长度的整数来阅读一些代码.MP整数的类型mpz_t与gmp.h头文件中的定义相同.

但是,我对这个库定义mpz_t类型的低级定义有一些疑问.在标题代码中:

/* THIS IS FROM THE GNU MP LIBRARY gmp.h HEADER FILE */
typedef struct
{
    /* SOME OTHER STUFF HERE */
} __mpz_struct;

typedef __mpz_struct mpz_t[1];
Run Code Online (Sandbox Code Playgroud)

第一个问题:是否[1]__mpz_struct?换句话说,typedefmpz_t类型定义为__mpz_struct具有一次出现的数组?

第二个问题:为什么阵列?(为什么只出现一次?)这是我听说过的结构黑客之一吗?

第三个问题(可能与第二个问题间接相关):mpz_init_set(mpz_t, unsigned long int)函数的GMP文档说只使用它作为pass-by-value,尽管可以假设这个函数会在被调用函数中修改它的内容(因此需要pass-by-reference)语法.参考我的代码:

/* FROM MY CODE */
mpz_t fact_val;                /* declaration */
mpz_init_set_ui(fact_val, 1);  /* Initialize fact_val */
Run Code Online (Sandbox Code Playgroud)

单次出现数组是否允许自动传递引用(由于C中数组/指针语义的崩溃)?我很自然地承认我有点过分分析这个,但我当然喜欢对此进行任何讨论.谢谢!

c arrays struct typedef gmp

8
推荐指数
2
解决办法
815
查看次数

从源代码编译cpabe包时链接gmp时出错

我最后花了几个小时从Ubuntu 12.10中的源代码编译cpabe包,其中包含gmp和pbc依赖项.以下错误消息似乎是Web中许多人的问题(即使编译其他需要安装libgmp作为依赖项的软件包!).然而,我找不到任何可行的解决方案:

...
/usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol '__gmpz_init'
/usr/bin/ld: note: '__gmpz_init' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so so try adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

ubuntu linker compilation gmp

8
推荐指数
1
解决办法
3458
查看次数

在OSX上安装gmpy - 找不到mpc.h

我已经brew installmpcgmp,但是当我尝试pip install gmpy2,我得到就行了编译错误

#include "mpc.h"
Run Code Online (Sandbox Code Playgroud)

所以出于某种原因clang无法找到mpc图书馆.我不确定此时应该做些什么.

python clang gmp mpc

8
推荐指数
3
解决办法
8010
查看次数

如何序列化GMP mpf类型?

似乎GMP只提供了mpf(浮点)类型的字符串序列化:

mpf_get_str(), mpf_class::get_str()

mpz(整数)类型具有原始字节的附加接口: mpz_out_raw()

http://gmplib.org/manual/Function-Index.html

我错过了什么吗?有谁知道另一个可以序列化GMP浮点数的库?有谁知道另一个提供强大序列化的bignum lib?

编辑:我很高兴序列化MPFR的mpfr_t,同样似乎只提供字符串输出:http://www.mpfr.org/mpfr-current/mpfr.html#Function-Index

c c++ serialization gmp bignum

7
推荐指数
1
解决办法
1499
查看次数

有没有GMP对数函数?

GMP库中是否有任何对数函数?

logarithm gmp

7
推荐指数
4
解决办法
3134
查看次数

使用LLVM的大数字运算(来自Haskell)

对我之前的问题的回答表明Haskell表示plusWord2#llvm.uadd.with.overflow.我希望使用进位进行长时间的添加,就像x86 ADC指令的工作方式一样.该指令不仅添加了两个参数,还添加了进位的内容.

然后可以添加如下的长数字:

ADD x1 y1
ADC x2 y2
ADC x3 y3
...
Run Code Online (Sandbox Code Playgroud)

导致每个单词一个指令(忽略所需的任何周围移动等).

我查看了GMP库,以及它在通用C代码中如何进行长时间的添加.这是摘录自mpn/generic/add_n.c

sl = ul + vl;
cy1 = sl < ul;
rl = sl + cy;
cy2 = rl < sl;
cy = cy1 | cy2;
Run Code Online (Sandbox Code Playgroud)

注意,它保存了原始加法和进位位加法的进位.这些操作中只有一个可以携带,因此或者之后的携带就足够了.

显然,GMP具有针对特定平台的特定汇编代码,但我认为通用代码是一个很好的基础,因为它可能被编写为编译成合理的代码.在plusWord2#原始的操作手段,我不需要做无聊的比较,以获得进位,所以我实现了GMP的通用代码就像在Haskell如下:

addWithCarry :: Word# -> Word# -> Word# -> (# Word#, Word# #)
addWithCarry x y c =
  let 
    (# c1, r1 #) = plusWord2# x y
    (# c2, r2 …
Run Code Online (Sandbox Code Playgroud)

haskell llvm gmp integer-arithmetic

7
推荐指数
1
解决办法
308
查看次数