華為雲openEuler(鯤鵬)安裝gmp踩坑


華為雲openEuler(鯤鵬)安裝gmp踩坑

這里下載.xz的包而非.lz的包(后者要求lzip,yum中不包含,需下載源碼編譯安裝)

當前最新版本的gmp是gmp-6.2.1,故在命令行中執行以下代碼:

curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz

解壓:

tar -xvJf gmp-6.2.1.tar.xz

進入gmp文件夾,使用configure生成makefile:

cd gmp-6.2.1
./configure -enable-cxx

其中-enable-cxx表示啟用c++支持(gmp默認不開啟)

configure 的部分參數如下:

--prefix 指定安裝目錄,若不指定,默認為/usr/local

--disable-shared 禁用動態庫,默認開啟

--disable-shared 禁用靜態庫,默認開啟

然后編譯安裝:

make
make install

編譯完成后,編寫測試代碼(c++)如下:

#include <iostream>
#include "gmpxx.h"
//gmp為c++提供的頭文件,c程序不用加
#include "gmp.h"
//gmp為c語言提供的頭文件,c++程序可以不要
int main(){
    std::string a,b;
    std::getline(std::cin,a);//從輸入中讀入一行
    std::getline(std::cin,b);
    mpz_class ga(a);
    //構造函數,使用String類型轉換為gmp內置的大數類型
    mpz_class gb(b);
    std::cout << "a*b="<<ga*gb <<std::endl;
    //gmp對c++的支持,操作符重載,允許直接用乘法代替mpz_mul,返回值類型為mpz_t,同樣對於輸出iostream <<也有重載。
    std::cout << "gcd(a,b)="<<gcd(ga,gb) <<std::endl;
    return 0;
}
//從對c++特性的支持上來說,gmp比openssl強多了(

使用以下參數編譯並運行:

g++ <filename>.cpp -lgmp -lgmpxx -o <outfile> && ./<outfile>

輸入以下測試數據

123456789987654321
987654321123456789

結果:

a*b=121932632103337905662094193112635269
gcd(a,b)=1222222221

可能出現的問題:

1.編譯時出現缺少m4的問題

使用yum install -y m4 安裝,重新編譯即可

2.(c++程序)編譯后運行時的鏈接庫問題,表現如下:

[filename]:error while loading shared libraries: libgmpxx.so.4: cannot open shared object file: No such
file or directory

使用ldd查看文件鏈接庫的狀態如下:

# ldd testgmp
        linux-vdso.so.1 (0x0000ffff2a020000)
        libgmp.so.10 => /lib64/libgmp.so.10 (0x0000ffff29f70000)
        libgmpxx.so.4 => not found
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000ffff29dc0000)
        libm.so.6 => /lib64/libm.so.6 (0x0000ffff29cf0000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffff29cb0000)
        libc.so.6 => /lib64/libc.so.6 (0x0000ffff29b20000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffff2a030000)

可以看到找不到libgmpxx.so.4

解決方法:在~/.bash_profile文件尾插入以下語句

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

若使用了configure指定了其他安裝目錄<path>,則使用<path>替換上面的默認路徑的/usr/local部分

然后在終端中輸入

source ~/.bash_profile


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM