Mac安装GMP大数运算库,并连接到Clion

Mac安装GMP大数运算库,并连接到Clion

1.下载GMP, 为了便于在Mac下解压缩,建议下载tar.xz版本的。

在这里插入图片描述

2. 解压缩文件某个目录下(本机解压在~/ 路径下,文件名字为gmp)

当然你也可以参考官网上的pdf文档,很全面。
在这里插入图片描述

#比较耗时 可以再make的时候加上  -j$   $代表cpu核心数  加速编译
#比如我的电脑为2核4线程 :make -j4
cd  ~/gmp   
./configure
make
make check
make install

在这里插入图片描述

3.查看是否成功安装

检查这两个目录下是否有gmp的相关文件
cd /usr/local/lib
cd /use/local/include
或者使用gcc检测调用  
gcc test.cpp -o test -lgmp  #注意加上这个lgmp

具体的代码可以参见这位老哥的博文

4.在Clion里添加库文件(最终版见6小节)

cmake_minimum_required(VERSION 3.13)
project(MyGMP)
set(CMAKE_CXX_STANDARD 14)
add_executable(MyGMP main.cpp)
# To use GMP, you need add two lines into you CMakeLists.txt
# You need find your GMP installed path firstly, and Then add them.
include_directories("/usr/local/include")
target_link_libraries(MyGMP "/usr/local/lib/libgmp.a")

前四行为自动生成的代码,后两行为添加的代码(MyGMP为项目名称,此处因项目名而异)

/** 最后来个测试代码*/
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
using namespace std;


int main(int argc, char **argv) {
    mpz_t begin, m1, m2;
    int count;

    /* set begin to 2^127 */
    mpz_init_set_str(begin, "170141183460469231731687303715884105728", 0);

    count = (argc==1)?10:atoi(argv[1]);


    while(count--) {
        mpz_nextprime(begin, begin);
        gmp_printf("%Zd/n", begin);
    }

    mpz_clear(begin);
    return 0;
}
/** haha ok*/

5.一个很严重的问题(C++ mpz_class的“<<”输出)

如下代码:
/** 最后来个测试代码*/
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>

using namespace std;


int main(int argc, char **argv) {
        mpz_class z = 1000000;
        cout << "value " << z << "\n";
//        cout << "value " << z.get_str() << "\n";
        return 0;

}
#出现了如下的报错
/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/zhao/CLionProjects/MyGMP/cmake-build-debug --target MyGMP -- -j 2
Scanning dependencies of target MyGMP
[ 50%] Building CXX object CMakeFiles/MyGMP.dir/main.cpp.o
[100%] Linking CXX executable MyGMP
Undefined symbols for architecture x86_64:
  "operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, __mpz_struct const*)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& operator<<<__mpz_struct [1], __mpz_struct [1]>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, __gmp_expr<__mpz_struct [1], __mpz_struct [1]> const&) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [MyGMP] Error 1
make[2]: *** [CMakeFiles/MyGMP.dir/all] Error 2
make[1]: *** [CMakeFiles/MyGMP.dir/rule] Error 2
make: *** [MyGMP] Error 2

上述问题没有得到解决,但是查阅stackover找到了另外的方法解决,输出转化为str ,但是输入仍有问题!

int main(int argc, char **argv) {
        mpz_class z = 1000000;
        //cout << "value " << z << "\n";
		cout << "value " << z.get_str() << "\n";
        return 0;

}

6.解决了 哈哈哈

看到了这篇文章: vs2017使用gmp类库时输入输出符号无法解析外部符号

#include <iostream>
#include <gmp.h>
#include <gmpxx.h>

#pragma comment(lib,"libgmpxx.a")
#pragma comment(lib,"libgmp.a")

#pragma comment(lib,"libgcc.a")
#pragma comment(lib,"libmingwex.a")
#pragma comment(lib,"libmsvcrt.a")

嗯我好像没有处理添加的这个libgmpxx.a 这个玩意儿呀!!!
加上试试?

cmake_minimum_required(VERSION 3.13)
project(MyGMP)
set(CMAKE_CXX_STANDARD 11)
add_executable(MyGMP main.cpp)

# To use GMP, you need add two lines into you CMakeLists.txt
# You need find your GMP installed path firstly, and Then add them.

include_directories("/usr/local/include")
include_directories("/usr/local/lib")

target_link_libraries(MyGMP "/usr/local/lib/libgmp.a")
target_link_libraries(MyGMP "/usr/local/lib/libgmpxx.a")

ojbk!!! 哈哈 配了一晚上?
后来在看官方文档(官网可下载pdf版本)关于输入和输出的部分,他也说了是在libgmpxx中提供了这个功能。

10.3 C++ Formatted Output

The following functions are provided in libgmpxx (see Section 3.1 [Headers and Libraries], page 17), which is built if C++ support is enabled (see Section 2.1 [Build Options], page 3). Prototypes are available from <gmp.h>.
### 配置和使用 GMP 为了在 CLion 中成功配置使用 GMP 大数运算,需确保 `CMakeLists.txt` 文件正确设置。对于 Mac 系统而言,除了基础的项目定义外,还需特别注意链接静态的方式。 #### 修改 CMakeLists.txt 文件 以下是适用于 macOS 的 `CMakeLists.txt` 设置: ```cmake cmake_minimum_required(VERSION 3.13) project(MyGMP) set(CMAKE_CXX_STANDARD 11) add_executable(MyGMP main.cpp) include_directories("/usr/local/include") link_directories("/usr/local/lib") target_link_libraries(MyGMP /usr/local/lib/libgmp.a)[^1] target_link_libraries(MyGMP /usr/local/lib/libgmpxx.a) ``` 上述代码片段展示了如何指定头文件路径以及链接所需的 GMPGMPXX 。值得注意的是,这里不仅包含了基本的大整数支持(`libgmp.a`),还加入了面向对象接口的支持(`libgmpxx.a`),这有助于更方便地操作大数值数据结构。 #### 安装 GMP 如果尚未安装 GMP 及其开发包,则可以通过 Homebrew 来简化此过程: ```bash brew install gmp ``` 这条命令会自动下载安装最新版本的 GMP 到 `/usr/local/` 下面,默认情况下该位置已经被包含到了上面给出的例子中去。 #### 测试程序编写 创建一个简单的测试源码来验证环境是否搭建成功。下面是一个简单例子用于展示如何初始化、赋值及打印大整型变量: ```cpp #include <iostream> #include <gmpxx.h> int main() { mpz_class a; std::cout << "Enter number: "; std::cin >> a; std::cout << "You entered: " << a << "\n"; } ``` 这段代码利用了 `<gmpxx.h>` 提供的功能来进行输入输出操作,且可以编译运行以确认一切正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值