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)”。 为…

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的用…

【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…

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

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

动态库和静态库

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

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

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

网络运输层之(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格式。 视频…

ansible模块实战-部署rsync服务端

目录 1、根据部署流程所用到的命令找出模块 2.实战部署 2.1 服务部署&#xff1a;yum 安装 2.2 准备好rsync服务的配置文件 &#xff0c;并将配置文件通过copy模块分发给192.168.81.136这台受控主机 2.3 创建虚拟机用户 2.4 创建密码文件和改权限 2.5 模块对应目录&…

《QT实用小工具·二十九》托盘图标控件

1、概述 源码放在文章末尾 托盘图标控件 可设置托盘图标对应所属主窗体。 可设置托盘图标。 可设置提示信息。 自带右键菜单。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef TRAYICON_H #define TRAYICON_H/*** 托盘图标控件* 1. 可设置托盘图标…

基于SpringBoot+Vue的大学生心理咨询系统(源码+文档+包运行)

一.系统概述 使用旧方法对学生心理咨询评估信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在学生心理咨询评估信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次…

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错&#xff1a;应用未安装&#xff1a;软件包似乎无效 解决办法&#xff1a;因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

算法训练营第25天回溯(分割)

回溯算法&#xff08;分割&#xff09; 131.分割回文串 力扣题目链接(opens new window) 题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“…

Matlab 将数据写入excel文件

Matlab 将数据写入excel文件 函数&#xff1a;writematrix 功能&#xff1a;将数据写入文件 语法 writematrix(A) writematrix(A,filename) writematrix(___,Name,Value) 说明 writematrix(A) 将同构数组 A 写入以逗号分隔的文本文件。文件名为数组的工作区变量名称&…

IDEA如何配置 Maven 及 Maven 安装过程(详细版)

IDEA如何配置 Maven&#xff08;详细版&#xff09; 一、安装Maven 1、下载Maven 安装包 官网&#xff1a;https://maven.apache.org/ 2、点击Download 》选择 apache-maven-3.8.6-bin.zip 3、下载后解压产生此文件夹 4、文件夹如图所示 二、环境变量配置 1、点击我的电脑-…