1. UbuntuとGCC
著者:梅谷 武
演習用マシンとそれにUbuntuとGCCを導入する方法について記す。
作成:2024-03-08
更新:2024-10-24
 演習で用いるマシンはやや古いミニPCである。
  • CPU:Core i3-7100U 2.40GHz 2core/4thread
  • RAM:8GB
  • SSD:222GB
  • OS: Windows 10 Home(64bit)
低スペックでWindows11にアップグレードすることができないので、Windows10サポート終了後はLinuxマシンとして使用することを検討している。今回はWSL上にUbuntuをインストールするので、ハードウェア資源のかなりの部分はWindowsが占有することになる。したがってマルチスレッドは難しく、さらにRAM容量も少ないことから正確な評価は困難である。Ubuntu上の開発環境の大雑把な傾向をつかむことが目標である。
 Windows上WSLによりDebian GNU/Linux系OSのUbuntuを導入するのであるが、さまざまな実験を行なっているとファイルシステムが修復できない状態に陥ることがある。このとき単にUbuntuを再導入しただけでは不具合が解消しないことがあるため、ファイルシステムをクリーンな状態に戻してからUbuntuを再導入する必要がある。それには最初にUbuntuのアンインストールを行なわなければならない。Ubuntuを初めてインストールするときは必要ない。
 次の手順で行なう。
  1. 「設定>アプリ」で Ubuntu をアンインストール
  2. 「設定>アプリ」で Windows Subsystem for Linux をアンインストール
  3. 「Windowsの機能」で
    • Linux用Windowsサブシステムのチェック外す
    • 仮想マシンプラットフォームのチェック外す
  4. 再起動
 PC環境により微妙に異なるのでネットで確認すること。
 これについては次を参照のこと。
 本環境においてはターミナルあるいはPowerShellより
> wsl --install
だけでインストールすることができた。その後再起動し、ユーザー名とパスワードを設定すれば導入完了である。
 Ubuntuを起動し、ホームディレクトリにログインするには
> wsl --cd ~
とする。
 Ubuntu導入直後に最初にやるべきことはDNSサーバーを設定することである。これをしないとUbuntuはWindowsで設定しているDNSサーバーを参照しないので、Ubuntuからインターネットにアクセスできない可能性がある。
 これは例えばGoogleのDNSサーバー:8.8.8.8を使う場合は次のようにする。
$ sudo sh -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
$ sudo sh -c "echo '[network]\ngenerateResolvConf = false' > /etc/wsl.conf"
 Ubuntuからインターネットにアクセスできるようになったら、次のようにしてアップデートする。
$ sudo apt update
$ sudo apt upgrade
$ cat /etc/issue
Ubuntu 24.04.1 LTS \n \l
 Linux上で開発する場合、エディタとしてemacsを使うのが古くからの慣習として定着しており、現在でも多くの利用者がいる。しかし、WSL上のUbuntuで開発する場合、Windows上での開発経験はあるがLinux上での開発経験はないという方が多いと思われる。そういう方にとってはemacsの使い方を覚えるよりはVS Codeを使う方が楽である。emacs未経験者にはVS Codeをお勧めしておきたい。もちろんemacsという選択も悪くはない。
 VS Codeの導入については次を参照のこと。
 gccとgdbを導入する。
$ sudo apt install build-essential
$ sudo apt install gdb
 成功したらバージョンを確認しておく。
$ gcc --version
gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
$ gdb --version
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
 ここでVS CodeにC/C++拡張を導入しておく。それにはUbuntuを起動して立ち上がるbashシェルから
$ code .
としてVS Codeを立ち上げ、拡張メニューから「C/C++ Themes」を選択して導入する。
 ホームディレクトリ下にhelloというディレクトリを作り、そこに入ってVS Codeを立ち上げ、hello.cというC言語のソースファイルを作成する。
#include <stdio.h>
int main(void)
{
  printf("hello, world\n");
  return 0;
}


 この状態でVS Codeのメニューからターミナルを立ち上げ、hello.cをコンパイルし、実行する。
$ gcc -o hello hello.c
$ ./hello
hello, world
$ 
 ホームディレクトリ下にsumというディレクトリを作り、そこに入ってVS Codeを立ち上げ、sum.cというC言語のソースファイルを作成する。
#include <stdio.h>
int main(void)
{
  int sum = 0;
  for (int i = 1; i <= 10; i++)
    sum += i;
  printf("sum = %d\n", sum);
  return 0;
}


 次にVS Codeのメニューから「実行とデバッグ」を選択する。これによりデバッグ用実行ファイルが作成され、実行される。この状態でブレークポイントを設定して再度「実行とデバッグ」を押し、設定したブレークポイントで止まることを確認する。
 最新のC++23対応実験版14.0.1の導入。
$ sudo apt install gcc-14
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14
$ sudo update-alternatives --config gcc
$ sudo apt install g++-14
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 14
$ sudo update-alternatives --config g++
$ gcc --version
gcc (Ubuntu 14-20240412-0ubuntu1) 14.0.1 20240412 (experimental) [master r14-9935-g67e1433a94f]
$ g++ --version
g++ (Ubuntu 14-20240412-0ubuntu1) 14.0.1 20240412 (experimental) [master r14-9935-g67e1433a94f]
$ sudo apt install clang
$ sudo apt install llvm
$ sudo apt install lldb
$ clang --version
Ubuntu clang version 18.1.3 (1ubuntu1)
$ llvm-config --version
18.1.3
$ lldb --version
lldb version 18.1.3
This document is licensed under the MIT License.
Copyright (C) 2024 Takeshi Umetani