【WSL2】【Ubuntu】C言語のコンパイルはgcc、C++言語のコンパイルはg++を使う

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

WSL2(Ubuntu)環境でC言語やC++言語のプログラムをコンパイルする際、コンパイラの指定を誤ってエラーが発生したため、その原因と正しいコマンドをメモします。

前提条件と開発環境の準備

UbuntuでC/C++のビルドを行うためには、build-essentialパッケージ(gcc、g++、makeなどを含むメタパッケージ)をインストールしておく必要があります。

sudo apt update
sudo apt install -y build-essential

C++のコードをgccでコンパイルしようとして発生したエラー

以下のようなC++のサンプルコード(test.cpp)を作成しました。

#include <iostream>

int main(void) {
    std::cout << "Hello, WSL2!" << < std::endl;
    return 0;
}

これをいつものように gcc コマンドでコンパイルしようとしたところ、以下のようなリンカエラー(undefined reference)が発生しました。

$ gcc test.cpp
/usr/bin/ld: /tmp/ccXXXXXX.o: in function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x38): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: test.cpp:(.text+0x4d): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

原因と解決策

原因: gcc コマンドはC言語用のコンパイルドライバであるため、C++の標準ライブラリ(libstdc++など)が自動でリンクされず、C++の機能(iostream や標準ライブラリの初期化処理など)で未定義参照エラーになります。

解決策: C++のソースコードをコンパイルする場合は、C++用のコンパイルドライバである g++ を使用します。

$ g++ test.cpp -o test

実行ファイルが無事に生成され、実行できるようになります。

$ ./test
Hello, WSL2!

C言語(.c)は gcc、C++言語(.cpp)は g++ を使うという基本を再確認する良い機会になりました。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更記事タイトルの「Ubuntsu」を「Ubuntu」に修正しました。
  • 追加gccとg++の使い分けに関する解説と、簡単なコンパイル・実行手順を追加しました。

文書情報

記事タイトル
【WSL2】【Ubuntu】C言語のコンパイルはgcc、C++言語のコンパイルはg++を使う
作成日
更新日
Source URL
https://papanda925.com/?p=1505

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました