如何在 c 中打印 libpari 版本?
How to print libpari version in c?
我想从 c 程序打印 libpari 库的版本
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
#include<pari/pari.h>
int main(void){
gmp_printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
gmp_printf (" GMP-%s \n ", gmp_version );
mpfr_printf(" MPC-%s \nMPFR-%s \n GMP-%s \n", MPC_VERSION_STRING, mpfr_version, gmp_version );
gmp_printf("pari_version = %s\n", GENtostr(pari_version())); // paricfg_version_code);
return 0;
程序编译但是
gcc g.c -lpari -lmpc -lmpfr -lgmp -Wall
a@zalman:~/Dokumenty/gmp$ ./a.out
MPFR library: 4.1.0
MPFR header: 4.1.0 (based on 4.1.0)
GMP-6.2.1
MPC-1.2.0
MPFR-4.1.0
GMP-6.2.1
Memory protection violation
我也试过了
pari_printf("pari_version = %Ps\n", GENtostr(pari_version())); // paricfg_version_code);
pari_flush();
我用谷歌搜索并搜索了手册。我该怎么做?
#include<stdio.h>
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
#include<pari/pari.h>
int main(void){
gmp_printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
gmp_printf (" GMP-%s \n ", gmp_version );
mpfr_printf(" MPC-%s \nMPFR-%s \n GMP-%s \n", MPC_VERSION_STRING, mpfr_version, gmp_version );
printf("paricfg_version_code = %ld\n", paricfg_version_code);
return 0;
}
结果是
MPFR library: 4.1.0
MPFR header: 4.1.0 (based on 4.1.0)
GMP-6.2.1
MPC-1.2.0
MPFR-4.1.0
GMP-6.2.1
paricfg_version_code = 134401
- 您在第一次尝试时遇到内存保护冲突的原因是因为您的程序缺少
pari_init()
调用;函数 pari_version()
需要 pari 堆栈来创建它的 return 值...
它应该在您的主程序中工作,即实际使用 pari 库并首先包含 pari_init()
的主程序。您可能希望将结果打印为
GEN v = pari_version(), M = gel(v,1), m = gel(v,2), p = gel(v,3);
printf("pari-%ld.%ld.%ld", itos(M), itos(m), itos(p));
(M,m,p分别代表主版本号,次版本号,补丁级别)
出于同样的原因,第二次尝试使用 pari_printf()
无法工作,还因为您不应该使用 GENtostr()
,因为它会转换 GEN
char*
并且 %Ps
构造需要一个 GEN
参数。
如果您真的希望它在没有 pari 堆栈的情况下工作,您可以通过“解码”版本代码来调整答案中的解决方案,如下所示
const ulong mask = (1<<PARI_VERSION_SHIFT)-1;
ulong n = paricfg_version_code, M, m, p;
p = n & mask; n >>= PARI_VERSION_SHIFT;
m = n & mask; n >>= PARI_VERSION_SHIFT;
M = n;
printf("pari-%lu.%lu.%lu", M, m, p);
我想从 c 程序打印 libpari 库的版本
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
#include<pari/pari.h>
int main(void){
gmp_printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
gmp_printf (" GMP-%s \n ", gmp_version );
mpfr_printf(" MPC-%s \nMPFR-%s \n GMP-%s \n", MPC_VERSION_STRING, mpfr_version, gmp_version );
gmp_printf("pari_version = %s\n", GENtostr(pari_version())); // paricfg_version_code);
return 0;
程序编译但是
gcc g.c -lpari -lmpc -lmpfr -lgmp -Wall
a@zalman:~/Dokumenty/gmp$ ./a.out
MPFR library: 4.1.0
MPFR header: 4.1.0 (based on 4.1.0)
GMP-6.2.1
MPC-1.2.0
MPFR-4.1.0
GMP-6.2.1
Memory protection violation
我也试过了
pari_printf("pari_version = %Ps\n", GENtostr(pari_version())); // paricfg_version_code);
pari_flush();
我用谷歌搜索并搜索了手册。我该怎么做?
#include<stdio.h>
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
#include<pari/pari.h>
int main(void){
gmp_printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
gmp_printf (" GMP-%s \n ", gmp_version );
mpfr_printf(" MPC-%s \nMPFR-%s \n GMP-%s \n", MPC_VERSION_STRING, mpfr_version, gmp_version );
printf("paricfg_version_code = %ld\n", paricfg_version_code);
return 0;
}
结果是
MPFR library: 4.1.0
MPFR header: 4.1.0 (based on 4.1.0)
GMP-6.2.1
MPC-1.2.0
MPFR-4.1.0
GMP-6.2.1
paricfg_version_code = 134401
- 您在第一次尝试时遇到内存保护冲突的原因是因为您的程序缺少
pari_init()
调用;函数pari_version()
需要 pari 堆栈来创建它的 return 值...
它应该在您的主程序中工作,即实际使用 pari 库并首先包含 pari_init()
的主程序。您可能希望将结果打印为
GEN v = pari_version(), M = gel(v,1), m = gel(v,2), p = gel(v,3);
printf("pari-%ld.%ld.%ld", itos(M), itos(m), itos(p));
(M,m,p分别代表主版本号,次版本号,补丁级别)
出于同样的原因,第二次尝试使用
pari_printf()
无法工作,还因为您不应该使用GENtostr()
,因为它会转换GEN
char*
并且%Ps
构造需要一个GEN
参数。如果您真的希望它在没有 pari 堆栈的情况下工作,您可以通过“解码”版本代码来调整答案中的解决方案,如下所示
const ulong mask = (1<<PARI_VERSION_SHIFT)-1; ulong n = paricfg_version_code, M, m, p; p = n & mask; n >>= PARI_VERSION_SHIFT; m = n & mask; n >>= PARI_VERSION_SHIFT; M = n; printf("pari-%lu.%lu.%lu", M, m, p);