質問: OSをSolarisからRed Hat Enterprise Linux Serverへ移行します。このとき、Solaris上C言語で作成したプログラムについて、どのような注意点・修正が必要でしょうか?具体的な移行作業を示して下さい。 【OS情報】 Solaris(SunOS 5.10、CC:Sun C 5.8 2005/10/13、GCC:version 3.4.3、32bit) Red Hat(Enterprise Linux Server release 5.3、CC:GCCへのリンクまたはsunstudio12.1、GCC:4.1.2.20080704(Red Hat 4.1.2-44)(GNU Make 3.81)、64bit) 【なんとなく分かっていること(これらを掘り下げて回答として頂いてもかまいません)】 1.アーキテクチャが異なるため再コンパイルが必要、その際Makeのオプションを変更 →コンパイル時の注意点は?オプションの変換方法は? 2.エンディアンが異なるため、バイトオーダー指定部分の改修 →例えばどんなコーディングが該当する? 3.CC判定がより厳しくなるため、プログラムの厳密さを向上させる 4.使用ライブラリ名が異なるためインクルードファイルを変更 5.その他、コーディング作法(関数によって宣言方法や引数の数が異なる)の修正 6.32Bitから64Bitへ変わる事への対応 3.4.5.6.→例えば? 7.なるべく工数を少なくするには?ツール(無償)などが存在する?
回答: 昔、同じようなことをしたことがあるので > 1.アーキテクチャが異なるため再コンパイルが必要、その際Makeのオプションを変更 > →コンパイル時の注意点は?オプションの変換方法は? makeのバージョンは同じだったので変えてない > 2.エンディアンが異なるため、バイトオーダー指定部分の改修 > →例えばどんなコーディングが該当する? ネットワークへの読み書き、バイナリデータの読み書きを適当にしているコーディング 例えばJPEGからSOIセグメントを取得する場合 > > short s; /* shortは2byteを仮定 */ > > > fread(&s, sizeof s, 1L, fp); > > > if (s == 0xFFD8) { /* SOIが来た場合 */ } > > > とかしていると、Solarisでは思ったとおり動きますが、 Linux(インテルのCPU)だと思ったとおりには動きません。 > 3.CC判定がより厳しくなるため、プログラムの厳密さを向上させる 出現した警告を片っ端から潰していく # 予めどれぐらいの警告が出てくるのか取りあえずコンパイルしてみた方がいい > 4.使用ライブラリ名が異なるためインクルードファイルを変更 > 5.その他、コーディング作法(関数によって宣言方法や引数の数が異なる)の修正 大昔のソース(bzeroとかを使っているようなK&R以前の代物)とかなければ問題ないと思う しかし、シグナルやGUIが絡んでくると各OSごとに挙動が変わるので厄介です > 6.32Bitから64Bitへ変わる事への対応 最低でも2038年問題を発生させないように time_tを使うべきところでintを使ってしまっている箇所は修正する > 7.なるべく工数を少なくするには?ツール(無償)などが存在する? autotoolに対応していれば無問題なんだけど、多分対応させていないでしょ?