Linux 安装 GHCup,GHC, cabal 以及通过 cabal 安装 pandoc

文章目录

  • 安装 GHCUP
    • 1. 指定国内镜像
    • 2. 执行安装
    • 3. 安装检查
  • 安装 pandoc
    • 1. 初始化包列表
    • 2. 安装命令
    • 3. Trouble Shooting
      • Failure to build crypton
      • Memory Exhausted 内存不足

安装 GHCUP

1. 指定国内镜像

在 GHCup 官方网站 上面提供了安装方式:

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

但是,大部分情况下我们都需要用到国内镜像来进行安装,可以通过以下方法指定国内镜像进行下载安装,这里参考了 如何安装 Haskell 工具链(2022 年版) 的安装介绍,指定了中科大的镜像。

首先,创建 ~/.cabal 目录,并创建 config 文件:

cd ~
mkdir .cabal
cd .cabal
vim config

config 文件中指定镜像:

repository mirrors.ustc.edu.cnurl: https://mirrors.ustc.edu.cn/hackage/secure: True

2. 执行安装

在官方提供的命令中,指定刚刚配置的镜像地址,执行安装命令:

curl --proto '=https' --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/ghcup/sh/bootstrap-haskell | BOOTSTRAP_HASKELL_YAML=https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.8.yaml sh

这里需要注意,https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.8.yaml 为本文安装时的最新版本,建议安装时查看一下目前 中科大开源镜像-ghcup 索引页面中的最新版本,并指定该版本的配置文件进行安装。

安装过程中,安装程序会询问几个安装选项,没有特殊要求可以全部 Enter 使用默认选项进行即可,这个默认选项将会选择不安装 Haskell Language Server,后续如果需要使用,可以在 ghcup tui 中的界面再次安装。

3. 安装检查

安装完成之后,此时命令行中已经可以使用 ghcghcicabal 命令了,执行命令查看版本,检查是否安装成功:

ghc --version
ghci --version
cabal --version

安装 pandoc

安装 pandoc 有多种方式,这里采用的是cabal 的官方安装指引中提供的安装方法。

yum install pandoc
通过 yum 安装的 pandoc,默认安装版本较低,功能有限,建议安装较新版本,具体看个人需求。此方法不需要通过 ghcup 和 cabal,也不需要解决 gcc 版本问题。

1. 初始化包列表

首先需要更新一下 cabal 的包列表:

cabal init

2. 安装命令

安装命令:

cabal install pandoc-cli

默认安装的可执行路径在 ~/.cabal/bin 下,如果需要指定安装路径,可以添加选项 --installdir <your-dir>。另外,可以使用 --force-reinstalls 选项进行重新安装,但是需要注意这个选项将忽略其他包对此包的版本依赖,可能会影响其他包的使用。

测试安装的 pandoc:

cd ~/.cabal/bin
./pandoc --version

可以看到,已经安装了新版本的 pandoc:

pandoc 3.1.13
Features: -server +lua
Scripting engine: Lua 5.4
User data directory: /root/.local/share/pandoc
Copyright (C) 2006-2023 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.

3. Trouble Shooting

Failure to build crypton

注意,如果系统上的 gcc 版本太低,将会导致如上安装报错,可以通过 gcc --version 查看当前版本,例如在 CentOS 7 上的默认 gcc 版本为 4.8.5,此时需要升级 gcc 解决问题,在 Github 上面也有一个 issue 提到了这个问题。

首先在 GNU 上面下载最新发型版本的 gcc 源码压缩包,本文更新版本为 13.2.0,下载文件 gcc-13.2.0.tar.gz,放到服务器上解压到指定的目录:

tar -zxvf /your-specified-dir gcc-13.2.0.tar.gz

例如 /home/icexk,解压之后进入该目录,执行依赖下载脚本安装依赖:

cd /home/icexk/gcc-13.2.0
./contrib/download_prerequisites

然后创建 build 目录,执行 configure 脚本进行编译前的配置:

mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

执行编译:

make && make install
# make -j 4 && make install

若资源允许可以添加 -j n 选项,其中 n 为指定 cpu 数量,提高编译速度,否则默认将会单线程进行,需要执行较长时间(具体根据设备资源情况)。

编译完成之后,查看 gcc 版本,此时仍然为旧版本,因为 gcc 命令依然指向 /usr/bin/gcc 这个旧版本的可执行文件,而新版本的 gcc 可执行文件默认在 /usr/local/bin 下面

因此,最后还需要将 /usr/bin 下面的可执行文件以及动态链接库替换成编译之后得到的新版本的 文件,可以将原命令文件备份,然后新建软链接到新版本的命令文件和动态库:

# 备份旧命令文件和动态链接库,具体名称可根据习惯定义
mv /usr/bin/gcc /usr/bin/gcc-default
mv /usr/bin/g++ /usr/bin/g++-default
mv /usr/bin/c++ /usr/bin/c++-default
mv /usr/bin/cc /usr/bin/cc-default
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.default
# 新建软链接
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/c++ /usr/bin/c++
ln -s /usr/local/bin/gcc /usr/bin/cc
ln -s /usr/local/lib64/libstdc++.so.6.0.32 /usr/lib64/libstdc++.so.6

在此检查 gcc 版本:

[root@localhost bin]# gcc --version
gcc (GCC) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

可以看到此时已经是新版本的 gcc 了。

Memory Exhausted 内存不足

可以尝试在虚拟机控制器上面增加内存,但是建议不要超过最大限制,另外可以尝试释放一些进程,或者关闭外部操作系统(对于大多数读者来说应该是你的 Windows 系统)上一些占用内存较多的程序,因为本质上虚拟机使用的还是系统的资源。

最后尝试重启一下虚拟机再执行安装命令,可以释放掉因上次安装内存不足而占用的 swap 交换内存,以及 cache 缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Android]模拟器登录Google Play失败

问题&#xff1a; 模拟器登录Google Play失败&#xff0c;提示couldnt sign in there was a problem communicating with google servers. try again later. 原因&#xff1a; 原因是模拟器没有连接到互联网&#xff0c;打开模拟器中Google浏览器进行搜索一样不行。 解决&am…

移动硬盘(PSSD)中文件占用空间远大于文件大小

定义 文件的大小&#xff1a;文件内容实际具有的字节数&#xff0c;它以Byte为衡量单位&#xff0c;只要文件内容和格式不发生变化&#xff0c;文件大小就不会发生变化。 文件占用空间&#xff1a;文件在磁盘上的所占空间&#xff0c;它最小的计量单位是“簇(Cluster)”。 为…

C语言基础--数组和指针

数组和指针 数组与指针的关系与运用 在C语言中&#xff0c;数组和指针是两个重要的概念&#xff0c;它们之间有着密切的联系。本文将介绍如何通过指针操作数组元素&#xff0c;探讨指针数组的概念以及如何将数组名作为函数参数&#xff0c;帮助读者更好地理解和运用数组与指针…

MySQL高负载排查方法最佳实践(15/16)

高负载排查方法 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。 # mpstat 是一款 CPU 性能指标实时展示工具 # 能展示每个 CPU 核的资源视情况&#xff0c;同时还能将资源使用情况进行汇总展示 # 如果CPU0 的 %idle 已经为 0 &#xff0c;说明此核已经非常繁忙# 打印所…

Istio介绍

1.什么是Istio Istio是一个开源的服务网格&#xff08;Service Mesh&#xff09;框架&#xff0c;它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括&#xff1a; 服务治理&#xff1a;Istio能够帮助管理服务之间的…

微服务之CircuitBreaker断路器

一、概述 1.1背景 在一个分布式系统中&#xff0c;每个服务都可能会调用其它的服务器&#xff0c;服务之间是相互调用相互依赖。假如微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务。这就是构成所谓“扇出”。 如果扇出的链路上某个微服务的调…

状态压缩DP题单

P1433 吃奶酪&#xff08;最短路&#xff09; dp(i, s) 表示从 i 出发经过的点的记录为 s 的路线距离最小值 #include<bits/stdc.h> #define int long long using namespace std; const int N 20; signed main() { int n; cin >> n;vector<double>x(n 1),…

C++项目 -- 负载均衡OJ(三)online_judge

C项目 – 负载均衡OJ&#xff08;三&#xff09;online_judge 文章目录 C项目 -- 负载均衡OJ&#xff08;三&#xff09;online_judge一、基于MVC结构的oj服务设计1.结构与功能 二、oj_model.hpp1.建立文件版题库2.文件版题库的服务模块3. MySQL版题库3.1.创建名为oj_client的用…

关于提高自己技术能力的几点思考

关于提高自己技术能力的几点思考 回想自己进步快的时候&#xff0c;一个是读书时理解了书中逻辑&#xff0c;然后代入到工作能够解决问题&#xff0c; 一个是解决了一个个个新问题的时候总结出经验的时候。现在想想这两种方式确实是符合认知逻辑的&#xff0c;了解到知识&…

【uniapp】引入uni-ui组件库

&#xff08;1&#xff09;新建项目的时候选择 uni-ui项目 &#xff08;2&#xff09;已经创建好的项目去官网单独安装 跳转单独安装组件 https://uniapp.dcloud.net.cn/component/uniui/quickstart.html#%E9%80%9A%E8%BF%87-uni-modules-%E5%8D%95%E7%8B%AC%E5%AE%89%E8%A3%8…

【前端】修改iframe里面的pdf的样式

iframe是HTML中的一种元素&#xff0c;用于在网页中嵌入其他网页或文档。通过使用iframe&#xff0c;你可以在一个网页中显示另一个网页的内容。然而&#xff0c;由于安全性和隐私方面的考虑&#xff0c;通过CSS样式直接修改iframe中的内容是不被允许的。 但是&#xff0c;你可…

202462读书笔记|《一世珍藏的诗歌200首》——你曾经羞赧地向我问起, 是谁最早在此留下足印

202462读书笔记|《一世珍藏的诗歌200首》——你曾经羞赧地向我问起&#xff0c; 是谁最早在此留下足印 《一世珍藏的诗歌200首》作者金宏宇&#xff0c;很多美好的诗&#xff0c;有徐志摩&#xff0c;戴望舒&#xff0c;林徽因&#xff0c;舒婷等的诗精选&#xff0c;很值得一读…

动态库和静态库

文章目录 一、 静态库二、动态库 一、 静态库 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库&#xff0c;因为他已经在你字节写的程序中。 编译静态库 将所有的.h文件拷贝到lib/include中…

面试题:JVM内存泄露服务器会有什么表现?怎么处理?

来源 阿里-技术-1面 我的回答 刚开始内存泄露少的时候&#xff0c;没什么影响&#xff0c;到后面&#xff0c;会频繁的进行Full GC。面试官&#xff1a;那CPU的表现是怎样的呢&#xff1f; 我&#xff1a;CPU使用率会很高&#xff0c;因为现在的垃圾回收器一般是使用的并行回…

代码随想录第44天 | 完全背包 、 518. 零钱兑换 II 、 377. 组合总和 Ⅳ

一、前言 参考文献&#xff1a;代码随想录 今天的主题是动态规划中的完全背包问题&#xff0c;完全背包的与01背包的区别是&#xff1a; 完全背包&#xff1a;可以里面的物品可以使用无数次&#xff1b; 01背包&#xff1a;里面的物品是允许使用一次&#xff1b; 二、完全…

2024年腾讯云服务器价格一览表

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务器来满足他们的数据存储和计算需求。腾讯云作为国内领先的云服务提供商&#xff0c;其服务器产品因性能稳定、安全可靠而备受用户青睐。那么&#xff0c;2024年腾讯云服务器的价格情况如何呢&#…

我自己就是自己的风水!!!

1. 不说负能量的话&#xff0c;会引发自己的负能量 在日常生活中&#xff0c;我们的语言不仅能够影响他人&#xff0c;更能影响我们自己。负能量的话语&#xff0c;如抱怨、批评或消极的自我对话&#xff0c;会潜移默化地影响我们的心态和情绪。为了维持积极的心态&#xff0c…

网络运输层之(3)GRE协议

网络运输层之(3)GRE协议 Author: Once Day Date: 2024年4月8日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

OpenHarmony多媒体-video_trimmer

简介 videotrimmer是在OpenHarmony环境下&#xff0c;提供视频剪辑能力的三方库。 效果展示&#xff1a; 安装教程 ohpm install ohos/videotrimmerOpenHarmony ohpm环境配置等更多内容&#xff0c;请参考 如何安装OpenHarmony ohpm包 。 使用说明 目前支持MP4格式。 视频…

双向冒泡算法(C语言版)

void BidBubbleSort(int array[], int n) {int low, high, flag, i;low 0;high n - 1;while (low < high){flag 0;//假设为0时为有序for (i low; i < high; i) //正向冒泡{if (array[i] > array[i 1]) //找到剩下中最大的{Swap(&array[i], &array[i 1])…