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 を使いたい
- -g, -xs オプションを付けてコンパイルする。-xs はデバッグ情報を実行ファイルに残す指定である。
- シグナルを無視させたいときは、gdb で
handle nostop SIGSEGVを実行する。 - マルチスレッドプログラムのデバッグには、gdb ではなく dbx を使う方が情報が得やすい。
システム性能
プロセスごとの 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 ビットカーネルを選ぶことはできない。