Skip to content

AIX compiler — コンパイラを区別する

TL;DR

AIXの cc をGCCと決めつけないでください。IBM XL C/C++とIBM Open XL C/C++でも呼び出しコマンドやオプションが異なります。製品と版を特定してからビルドします。

製品とコマンド

製品・対象版Cの呼び出しコマンド例注意点
IBM XL C/C++ for AIX 16.1.0xlcxlclangXL系とClang系のフロントエンドを区別する
IBM Open XL C/C++ for AIX 17.1.4ibm-clang_r旧XLの xlc 呼び出しをそのまま使う前提にしない
GCC(別途導入済みの場合)gccGCCの版と対象環境に合うマニュアルを参照する

IBMのXL 16.1.0の説明では xlcxlclang のフロントエンドが区別されています。Open XL 17.1.4の説明では従来の xlc などは非対応です。

Example

まず環境確認で製品とパスを特定します。次を hello.c として保存します。コードはISO Cの標準ライブラリだけを使います。

c
#include <stdio.h>

int main(void)
{
    puts("Hello, AIX");
    return 0;
}

IBM XL C/C++ for AIX 16.1.0の xlc が導入されている場合の最小例です。

sh
xlc hello.c -o hello
./hello

cc が利用するCコンパイラを指すことを確認済みなら、次の形で呼び出せます。cc の名前から製品やC規格モードを判断しないでください。

sh
cc hello.c -o hello

コンパイラ固有オプション

GCCの -std=c99-Wall などをXLの xlc に無条件で渡さないでください。Clangベースの製品でも、GCCとすべてのオプションや既定値が同じとは限りません。

ビルドを揃える

コンパイルとリンクは一貫したドライバと設定で行います。既存ライブラリのビット数やABIとの整合も確認します。このページでは特定環境の既定ビット数や既定規格モードを断定しません。

TODO: 対象AIX実機で製品・版を記録し、上記コードのコンパイルと実行を確認する。警告・規格・32 / 64ビットの具体的なオプションは、対象版を特定してから追記する。