インストール方法(結論)
せっかちなアナタに向けて。インストール済みのものは省いてね。
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
で確認)
後述するが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.2
:curl - How to use いわく、TLSサーバー接続時にバージョン1.2以降を指定する、の意味
-sSf
:curl - How to use いわく、-s
がsilend mode(進捗とかエラーメッセージの非表示)、-S
がshow error の略。silent mode 使用時にエラー情報は表示する。-f
はfail、どこで失敗したか教えてくれ、みたいな感じらしい。
インストール(失敗)+失敗原因1
試しにghcup list
コマンドを実行すると command not found
と。失敗したことがわかる。
ログを確認してみた。赤枠にある通り、Cコンパイラがないことが原因らしい。
gcc(GNU Compiler Collection)をインストールすれば良さそうなので試してみる。
このコマンドでインストールできそう。apt
のアップデートを忘れずに。
sudo apt update
sudo apt install gcc
インストール(失敗)+失敗原因2
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
g++
も必須とのこと。インストールコマンドは・・・
ですよね。じゃあインストールしてっと。
sudo apt install g++
インストール(失敗)+失敗原因3
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
sudo apt install make
インストール(成功)
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
忘れずに、環境変数を再読み込みする。↑の画像に書いてある通り。
source /home/[ユーザ名]/.ghcup/env
Haskellを試す
それが終わったら ghci
コマンドから対話環境を試してみる。
参考:Haskellの環境構築2023
product [1..5]
で5の階乗を計算してもらう。
:quit
で対話環境を抜ける。
ソースコードを書いて試してみる。Main.hs
ファイルを作成する。
main = do
print "Hello, World!"
ghc Main.hs
下記サイトいわく、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 と怒られる問題
ライブラリがインストールされているか確認してみる。
検索にはヒットしたが、先ほど登場したライブラリとは異なるようだ。
ライブラリが同名で存在するか確認してみる。
sudo apt search gmp
あったのでインストール。
sudo apt install libgmp3-dev
インストールできたことを確認。正直よくわかってないけど増えてる。
もう一度試してみる。
まずghc
コマンドでコンパイル。
ghc Main.hs
エラーが表示されなかったので ls
してみる。実行ファイルMain
が作成されていることを確認。
実行ファイルMain
を実行してみる。
参考サイト一覧
Haskellの環境構築2023
[linux]コンパイル時に「ld: cannot find -l」となるときの解決方法
Stack Overflow - /usr/bin/ld: cannot find -lgmp
makeするとライブラリが入っているのに /usr/lib/ld: cannot find と怒られる問題