如何在C语言程序中打印libpari库的版本号
根因说明
所有libpari的函数调用都依赖预先初始化的PARI内存栈和内部状态,未初始化就调用pari_version()会直接触发内存访问违例。
正确实现代码
#include <gmp.h> #include <mpfr.h> #include <mpc.h> #include <pari/pari.h> int main(void){ // 初始化PARI库,第一个参数为初始分配的栈大小,普通场景填1000000即可 pari_init(1000000, 0); 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 ); // 运行时获取动态链接的libpari版本 gmp_printf("pari_version = %s\n", GENtostr(pari_version())); // 也可直接使用编译时版本宏,不需要调用运行时接口 gmp_printf("pari compile version = %s\n", PARI_VERSION_STRING); // 释放PARI库占用的资源 pari_close(); return 0; }
编译运行说明
编译命令和原有逻辑保持一致即可:
gcc g.c -lpari -lmpc -lmpfr -lgmp -Wall
运行后不会再出现内存保护违例报错,可正常输出所有依赖库的版本信息。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

