Kali LinuxでC++23開発環境を構築するガイド【2025年版】
はじめに
セキュリティキャンプミニ山梨に参加をしたのですが、そこでC++の最新バージョンの環境が必要で研究室に設置しているパソコンをリモートで操作しようと思っていたのですがWIndowsのノートPCを持っていなかったのもあり、急遽手元にあったKali Linuxで環境構築を行ったので、せっかくなのでそのメモを残そうとして書いたメモです。
対象読者
- Kali Linuxユーザー(Debian系)
前提条件
- Kali Linux(本記事ではKali GNU/Linux Rolling 2025.3で検証)
目標
この記事では、以下の4つの検証コードがすべて正常に動作する環境を構築します:
- C++バージョン確認(出力:
C++23
) - std::print機能確認(出力:
Hello, World!
) - UTF-8文字セット確認(出力:
デフォルトの文字セットは UTF-8
) - 複数ファイルコンパイル確認(出力:
OK
+ ファイル出力)
Step 1: 現在の環境確認
まず、現在のシステム情報とコンパイラの状況を確認します。
システム情報の確認
cat /etc/os-release
実行結果例:
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION_ID="2025.3"
VERSION="2025.3"
VERSION_CODENAME=kali-rolling
ID=kali
ID_LIKE=debian
既存のGCCバージョン確認
gcc --version
実行結果例:
gcc (Debian 14.3.0-5) 14.3.0
Copyright (C) 2024 Free Software Foundation, Inc.
現在のGCCは14.3.0で、C++23対応には不十分です。
Clangの確認
clang --version
初期状態では「コマンド 'clang' が見つかりません」と表示される場合があります。
補足: Debian表記について
- KaliはDebian派生ディストリビューションです(
/etc/os-release
にもID_LIKE=debian
と出力されます)。そのため、gcc --version
の表示にあるgcc (Debian 15.x.y-*)
や、clang --version
のDebian clang version ...
は、パッケージのビルド元を示す表記であり、OSがDebianであるという意味ではありません。 -
apt search
ではkali-rolling
と表示され、配布元がKaliであることも確認できます。これらは矛盾ではなく、KaliがDebianをベースにしていることに由来した表記です。
Step 2: パッケージリストの更新
最新のパッケージ情報を取得します。
sudo apt update
実行例:
取得:1 https://packages.microsoft.com/repos/code stable InRelease [3,590 B]
取得:2 https://dl.google.com/linux/chrome/deb stable InRelease [1,825 B]
...
73.1 MB を 15秒 で取得しました (4,795 kB/s)
アップグレードできるパッケージが 467 個あります。
Step 3: GCC 15のインストール
C++23に対応するGCC 15をインストールします。
GCC 15の利用可能性確認
apt search "gcc-1[5-9]"
この出力でgcc-15/kali-rolling 15.2.0-1 amd64
が表示されることを確認します。
GCC 15とg++-15のインストール
sudo apt install gcc-15 g++-15
実行中の出力例:
Installing:
g++-15 gcc-15
Installing dependencies:
cpp-15 g++-15-x86-64-linux-gnu libgcc-15-dev
cpp-15-x86-64-linux-gnu gcc-15-x86-64-linux-gnu libstdc++-15-dev
Summary:
Upgrading: 0, Installing: 8, Removing: 0, Not Upgrading: 467
Download size: 249 MB
Space needed: 1,047 MB / 128 GB available
Continue? [Y/n] Y
Y
を入力してインストールを実行します。
インストール確認
gcc-15 --version
期待する出力:
gcc-15 (Debian 15.2.0-1) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
g++-15 --version
期待する出力:
g++-15 (Debian 15.2.0-1) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
Step 4: Clangのインストール(オプション)
追加の選択肢として、Clangもインストールします。
sudo apt install clang
インストール後の確認:
clang --version
期待する出力:
Debian clang version 19.1.7 (3+b2)
Target: x86_64-pc-linux-gnu
Thread model: posix
Step 5: 検証用ディレクトリの作成
テスト用のディレクトリ構造を作成します。
mkdir -p ~/Documents/Programing/security/yamanashi/cpp23-verification
cd ~/Documents/Programing/security/yamanashi/cpp23-verification
# 各テスト用のサブディレクトリを作成
mkdir test1-version-check
mkdir test2-stdprint
mkdir test3-utf8
mkdir test4-multifile
Step 6: 検証コードの実装とテスト
検証① C++バージョン確認
ファイル作成:
cd test1-version-check
nano Main.cpp
Main.cpp の内容:
#include <iostream>
int main()
{
#if defined(_MSC_VER) // Visual Studio
#if _MSVC_LANG < 201103L
std::cout << "before C++11\n";
#elif _MSVC_LANG == 201103L
std::cout << "C++11\n";
#elif _MSVC_LANG == 201402L
std::cout << "C++14\n";
#elif _MSVC_LANG == 201703L
std::cout << "C++17\n";
#elif _MSVC_LANG == 202002L
std::cout << "C++20\n";
#elif _MSVC_LANG == 202302L
std::cout << "C++23\n";
#elif 202302L < _MSVC_LANG
std::cout << "C++23 or later\n";
#endif
#else // その他のコンパイラ
#if __cplusplus < 201103L
std::cout << "before C++11\n";
#elif __cplusplus == 201103L
std::cout << "C++11\n";
#elif __cplusplus == 201402L
std::cout << "C++14\n";
#elif __cplusplus == 201703L
std::cout << "C++17\n";
#elif __cplusplus == 202002L
std::cout << "C++20\n";
#elif __cplusplus == 202302L
std::cout << "C++23\n";
#elif 202002L < __cplusplus
std::cout << "C++23 or later\n";
#endif
#endif
}
コンパイルと実行:
g++-15 -std=c++23 Main.cpp -o version_test
./version_test
期待する出力:
C++23
検証② std::print機能確認
ファイル作成:
cd ../test2-stdprint
nano Main.cpp
Main.cpp の内容:
#include <print>
int main()
{
std::println("Hello, World!");
}
コンパイルと実行:
g++-15 -std=c++23 Main.cpp -o stdprint_test
./stdprint_test
期待する出力:
Hello, World!
検証③ UTF-8文字セット確認
ファイル作成:
cd ../test3-utf8
nano Main.cpp
Main.cpp の内容:
#include <iostream>
#include <cstring>
int main()
{
// デフォルトの文字セット
// Visual Studio のデフォルトは Shift_JIS なので、コンパイラオプションで UTF-8 に変更が必要
const char s[] = "あいうえお";
// UTF-8 エンコーディングが保証された文字列
const char8_t u8[] = u8"あいうえお";
// 2つのバイト配列のサイズと内容を比較し、完全に一致するかを調べる
if ((sizeof(s) == sizeof(u8))
&& (std::memcmp(s, u8, sizeof(s)) == 0))
{
std::cout << "デフォルトの文字セットは UTF-8\n";
}
else
{
std::cout << "デフォルトの文字セットが UTF-8 ではない\n";
}
}
コンパイルと実行:
g++-15 -std=c++23 Main.cpp -o utf8_test
./utf8_test
期待する出力:
デフォルトの文字セットは UTF-8
検証④ 複数ファイルコンパイル確認
ヘッダーファイル作成:
cd ../test4-multifile
nano TextFile.hpp
TextFile.hpp の内容:
#pragma once
#include <string>
namespace mylib
{
bool WriteTextFile(const std::string& path, const std::string& text);
}
実装ファイル作成:
nano TextFile.cpp
TextFile.cpp の内容:
#include <fstream>
#include "TextFile.hpp"
namespace mylib
{
bool WriteTextFile(const std::string& path, const std::string& text)
{
std::ofstream file{ path };
if (!file)
{
return false;
}
file << text;
return true;
}
}
メインファイル作成:
nano Main.cpp
Main.cpp の内容:
#include <iostream>
#include <string>
#include "TextFile.hpp"
int main()
{
const std::string text = "Hello, World!";
if (mylib::WriteTextFile("output.txt", text))
{
std::cout << "OK\n";
}
else
{
std::cout << "Failed\n";
}
}
コンパイルと実行:
g++-15 -std=c++23 Main.cpp TextFile.cpp -o multifile_test
./multifile_test
期待する出力:
OK
ファイル出力確認:
cat output.txt
期待する出力:
Hello, World!
まとめ
構築完了した環境
- OS: Kali GNU/Linux Rolling (2025.3)
- コンパイラ: GCC 15.2.0(C++23対応)
- 追加ツール: Clang 19.1.7
C++23プログラムのコンパイル方法
g++-15 -std=c++23 <ソースファイル名> -o <実行ファイル名>
利用可能なC++23の新機能例
-
std::print
、std::println
(フォーマット出力) - improved constexpr
- deducing this
- static operator()
- その他多数の新機能
参考リンク
この記事は2025年9月20日時点の情報に基づいて作成したので最新の情報が欲しい方は別の方の記事を調べてください。