Solaris ユーザのためのヒント

ソフトウェア開発

64 ビットのプログラムをコンパイルしたい

Solaris 11 は SPARC, x86 のいずれも 64 ビット環境である。GCC でも Oracle Developer Studio でも、同じコンパイラで 32 ビットと 64 ビットのどちらのコードも生成できる。64 ビット専用にコンパイラをビルドし直す必要はない。

GCC のインストール

pkg install gcc

64ビットでコンパイルするときは -m64 を付ける。

gcc -m64 -o a.out a.c

32ビットでコンパイルするときは -m32 を付ける。

gcc -m32 -o a.out a.c

既定のビット幅はコンパイラやバージョンによって異なるので、-m64 または -m32 を明示的に指定する。

確認用のプログラムと実行

cd /tmp
cat > /tmp/a.c <<'EOF'
#include <stdio.h>
int main() {
  printf( "sizeof(int) = %zu\n", sizeof(int) );
  printf( "sizeof(long int) = %zu\n", sizeof(long int) );
  printf( "sizeof(void *) = %zu\n", sizeof(void *) );
  return 0;
}
EOF

gcc -m64 -o a.out a.c
./a.out

サイズの表示には、sizeof の型に合わせて %zu を使う。64 ビットでコンパイルできていれば、sizeof(void *) は 8 になる。生成されたファイルのビット幅は file コマンドでも確認できる。

file a.out
isainfo -b

GCC をソースからビルドしたい

配布パッケージの GCC で足りるときは、パッケージを使う方が簡単である。ソースからビルドするときは、先に GNU binutils と、GMP, MPFR, MPC のライブラリを用意する。make は GNU make (gmake) を使う。

binutils のインストール

gtar -xvzf binutils-2.44.tar.gz
cd binutils-2.44
mkdir build
cd build
../configure --prefix=/usr/local --disable-nls
gmake
gmake install

GCC のインストール。configure はソースディレクトリの外で実行する。GNU のアセンブラとリンカを使う指定は、gmake ではなく configure に与える。

gtar -xvJf gcc-14.2.0.tar.xz
cd gcc-14.2.0
mkdir build
cd build
../configure --prefix=/usr/local/gcc-14 \
  --with-gnu-as --with-as=/usr/local/bin/as \
  --with-gnu-ld --with-ld=/usr/local/bin/ld \
  --disable-nls
gmake
gmake install

Oracle Developer Studio の C/C++ コンパイラで gdb を使いたい

システム性能

プロセスごとの CPU 使用率とメモリ使用量は prstat コマンドで確認する。-a はユーザごとの集計を加える。-s は指定した項目での並べ替え、-n は表示する行数の指定である。

prstat -a
prstat -s cpu -n 10
prstat -s rss -n 10

ディスクの入出力は iostat コマンドで確認する。-x はデバイスごとの詳細、-n はデバイス名の表示である。最後の数字は表示間隔(秒)である。

iostat -xn 1

メモリとスワップの全体の状況は vmstat コマンドで確認する。

vmstat 1

システム情報

カーネルが 64 ビットかどうかを確認したい

isainfo コマンドを使う。-kv はカーネルの命令セット、-b はアプリケーションのビット幅を表示する。

isainfo -kv
isainfo -b

Solaris 11 のカーネルは 64 ビットのみである。Solaris 10 までのように、起動時に 32 ビットカーネルと 64 ビットカーネルを選ぶことはできない。