LoginSignup
2
0

Haskell 環境構築+カンタンなものを実行

Posted at

インストール方法(結論)

せっかちなアナタに向けて。インストール済みのものは省いてね。

sudo apt update
sudo apt gcc
sudo apt g++
sudo apt make
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
sudo apt install libgmp3-dev
# Main.hs ファイルを作成する(省略)
ghc Main.hs # Main.hsファイルをコンパイル
./Main # 実行ファイルMainを実行

GHCupをインストールするまでで良ければコレで終わり。

前提

動作環境:WSL2(Ubuntu22.04)
curlがインストールされていること(curl --versionで確認)
curl_version.png

後述するがCコンパイラ、g++makeも必要だった。結論としては下記コマンドでインストールした。

sudo apt update
sudo apt gcc
sudo apt g++
sudo apt make
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

Haskell環境構築指針

参考:Haskellの環境構築2023
下記コマンドを実行。何度か入力を聞かれるので、Enter押下→1回目はp、2回目はy、3回目はy→Enter押下、にした。

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

コマンド補足

curl --proto '=https'curl - How to use いわく、httpsプロトコルだけ許可する、の意味
--tlsv1.2curl - How to use いわく、TLSサーバー接続時にバージョン1.2以降を指定する、の意味
-sSfcurl - How to use いわく、-sがsilend mode(進捗とかエラーメッセージの非表示)、-Sがshow error の略。silent mode 使用時にエラー情報は表示する。-fはfail、どこで失敗したか教えてくれ、みたいな感じらしい。

インストール(失敗)+失敗原因1

試しにghcup listコマンドを実行すると command not found と。失敗したことがわかる。
ghcup_install_failed.png

ログを確認してみた。赤枠にある通り、Cコンパイラがないことが原因らしい。
ghcup_cat_log.png

gcc(GNU Compiler Collection)をインストールすれば良さそうなので試してみる。

gcc_install_cmd.png
このコマンドでインストールできそう。aptのアップデートを忘れずに。

sudo apt update
sudo apt install gcc

インストールできたことを確認。
gcc_versio.png

インストール(失敗)+失敗原因2

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

ghcup_install_failed_2.png

g++も必須とのこと。インストールコマンドは・・・
g++_version.png
ですよね。じゃあインストールしてっと。

sudo apt install g++

インストールできたことを確認。
g++_version_2.png

インストール(失敗)+失敗原因3

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

cat_log_3.png
makeコマンドも必要とのこと。

sudo apt install make

makeもインストールできた。
make_version.png

インストール(成功)

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

ghcup_cat_log.png

忘れずに、環境変数を再読み込みする。↑の画像に書いてある通り。

source /home/[ユーザ名]/.ghcup/env

Haskellを試す

バージョンを確認する。
ghc_version.png

それが終わったら ghci コマンドから対話環境を試してみる。
参考:Haskellの環境構築2023
product [1..5] で5の階乗を計算してもらう。
:quit で対話環境を抜ける。
再読み込み+ghciお試し.png

ソースコードを書いて試してみる。Main.hsファイルを作成する。

main = do
    print "Hello, World!"
ghc Main.hs

cannot_find_lgmp.png

下記サイトいわく、cannot find -lgmp は gmpがライブラリにないですよ、という意味らしい
参考:[linux]コンパイル時に「ld: cannot find -l」となるときの解決方法

下記サイトでは、Ubuntuではsudo apt-get install libgmp3-devを実行すればいいよ、とのこと。
ただ、情報が古いのでライブラリ名を確認してみる。
参考:Stack Overflow - /usr/bin/ld: cannot find -lgmp

また、インストール済みだがシンボリックリンクの問題でエラーが出ているパターンも考えられる。
参考:makeするとライブラリが入っているのに /usr/lib/ld: cannot find と怒られる問題
ライブラリがインストールされているか確認してみる。
ldconfig_gmp.png
検索にはヒットしたが、先ほど登場したライブラリとは異なるようだ。

ライブラリが同名で存在するか確認してみる。

sudo apt search gmp

apt_search_gmp.png

あったのでインストール。

sudo apt install libgmp3-dev

インストールできたことを確認。正直よくわかってないけど増えてる。
ldconfig_gmp_2.png

もう一度試してみる。
まずghcコマンドでコンパイル。

ghc Main.hs

エラーが表示されなかったので ls してみる。実行ファイルMain が作成されていることを確認。
実行ファイルMain を実行してみる。
Main実行.png

参考サイト一覧

Haskellの環境構築2023
[linux]コンパイル時に「ld: cannot find -l」となるときの解決方法
Stack Overflow - /usr/bin/ld: cannot find -lgmp
makeするとライブラリが入っているのに /usr/lib/ld: cannot find と怒られる問題

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0