MSYS環境でのGCCのローカライズサポート有効化

MSYS環境でGCCを使用する際に、デフォルトではローカライズサポートが無効になっています。これにより、コンパイル時のエラーメッセージは英語のみとなります。

// エラーを含むCコードの例
#include <stdio.h>

int main(){
    int a = 1;
    n b = 2;
    d c = 1.1;
    p("Hello world!\n");
    return v;
}

このコードをコンパイルすると以下のエラーメッセージが出力されます:

~ gcc main.c -o main
main.c: In function 'main':
main.c:5:9: error: unknown type name 'n'; did you mean 'int'?
    5 |         n b = 2;
      |         ^
      |         int
main.c:6:9: error: unknown type name 'd'; did you mean 'double'?
    6 |         d c = 1.1;
      |         ^
      |         double
main.c:7:9: error: implicit declaration of function 'p'; did you mean 'printf'? [-Wimplicit-function-declaration]
    7 |         p("Hello world!\n");
      |         ^
      |         printf
main.c:8:16: error: expected expression before 'v'
    8 |         return v;
      |

GCCの構成パラメータを確認します:

~ gcc -v
Using built-in specs.
COLLECT_GCC=C:\msys64\ucrt64\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-15.2.0/configure --prefix=/ucrt64 --with-local-prefix=/ucrt64/local --with-native-system-header-dir=/ucrt64/include --libexecdir=/ucrt64/lib --enable-bootstrap --enable-checking=release --with-arch=nocona --with-tune=generic --enable-mingw-wildcard --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-backtrace=yes --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --disable-libstdcxx-pch --enable-lto --enable-libgomp --disable-libssp --disable-multilib --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/ucrt64 --with-mpfr=/ucrt64 --with-mpc=/ucrt64 --with-isl=/ucrt64 --with-pkgversion='Rev11, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --with-libstdcxx-zoneinfo=yes --disable-libstdcxx-debug --enable-plugin --with-boot-ldflags=-static-libstdc++ --with-stage1-ldflags=-static-libstdc++
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.2.0 (Rev11, Built by MSYS2 project)

この出力から、--disable-nlsオプションが指定されていることが確認できます。これを有効にするためには、GCCを再ビルドし、--enable-nlsオプションを追加する必要があります。

MSYS公式パッケージスクリプトのダウンロード

以下のリンクからMSYS2のパッケージリポジトリをクローンするかZIPファイルをダウンロードします:msys2-packages

ダウンロードした後、gccディレクトリに移動し、PKGBUILDファイルを開きます。build()関数内のconfigureコマンドに--enable-nlsオプションを追加します:

${srcdir}/gcc-${pkgver}/configure \
  --build=${CHOST} \
  --prefix=/usr \
  --libexecdir=/usr/lib \
  --enable-bootstrap \
  --enable-static \
  --enable-shared \
  --enable-shared-libgcc \
  --enable-version-specific-runtime-libs \
  --with-arch=${_arch} \
  --with-tune=generic \
  --disable-multilib \
  ${_arch_conf} \
  --enable-__cxa_atexit \
  --with-dwarf2 \
  --enable-languages=c,c++,lto \
  --enable-graphite \
  --enable-threads=posix \
  --enable-libatomic \
  --enable-libgomp \
  --disable-libitm \
  --enable-libquadmath \
  --enable-libquadmath-support \
  --disable-libssp \
  --disable-win32-registry \
  --disable-symvers \
  --with-gnu-ld \
  --with-gnu-as \
  --disable-isl-version-check \
  --enable-checking=release \
  --without-libiconv-prefix \
  --without-libintl-prefix \
  --with-system-zlib \
  --enable-linker-build-id \
  --enable-libstdcxx-filesystem-ts \
  --enable-nls # ローカライズサポートを有効化

ソースファイルのダウンロードが遅い場合は、source部分を以下のURLに変更して清华大学ミラーサイトを利用します:

元のURL:

source=(https://ftp.gnu.org/gnu/gcc/gcc-${pkgver}/gcc-${pkgver}.tar.xz

変更後:

source=(https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-${pkgver}/gcc-${pkgver}.tar.xz

または、清华大学ミラーサイトから最新のソースパッケージを手動でダウンロードし、gccディレクトリにコピーします。GCC 清华ミラーサイト

修正後、MSYS2ターミナルで以下のコマンドを実行します:

MINGW_ARCH=ucrt64 makepkg-mingw -s -i

必要なビルド依存関係をインストールした後、ビルドとインストールが完了するまで待ちます。ビルドに数時間かかる可能性があります。

ビルドが完了したら、新たにコンパイルしたGCCを使用して以下を実行します:

~ gcc -v
使用内建 specs。
COLLECT_GCC=C:\msys64\ucrt64\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/lto-wrapper.exe
目標:x86_64-w64-mingw32
配置为:../gcc-15.2.0/configure --prefix=/ucrt64 --with-local-prefix=/ucrt64/local --with-native-system-header-dir=/ucrt64/include --libexecdir=/ucrt64/lib --enable-bootstrap --enable-checking=release --with-arch=nocona --with-tune=generic --enable-mingw-wildcard --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-backtrace=yes --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --disable-libstdcxx-pch --enable-lto --enable-libgomp --disable-libssp --disable-multilib --disable-rpath --disable-win32-registry --enable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/ucrt64 --with-mpfr=/ucrt64 --with-mpc=/ucrt64 --with-isl=/ucrt64 --with-pkgversion='Rev11, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --with-libstdcxx-zoneinfo=yes --disable-libstdcxx-debug --enable-plugin --with-boot-ldflags=-static-libstdc++ --with-stage1-ldflags=-static-libstdc++
線程モデル:posix
サポートの LTO 圧縮アルゴリズム:zlib zstd
gcc バージョン 15.2.0 (Rev11, Built by MSYS2 project)

新しいGCCを使用すると、コンパイルエラーメッセージが日本語で表示されるようになります。ただし、最新のGCCバージョンでは一部のメッセージがまだ翻訳されていない場合があります。

タグ: GCC msys localization nls

5月30日 10:08 投稿