COBOLからCharset Managerのiconvの関数iconvを呼び出すCOBOLアプリケーションを、32ビットから64ビットの環境へ移行すると、セグメンテーション違反で異常終了します。

COBOLからCharset Managerのiconvの関数iconvを呼び出すCOBOLアプリケーションを、32ビットから64ビットの環境へ移行すると、セグメンテーション違反で異常終了します。
64ビット環境で動作するためにパラメータの長さなどの変更が必要な場合があります。呼び出す関数の仕様に従って、COBOLソースを変更してください。

32ビット環境では、関数の戻り値が4バイトの場合、COBOLソースでは対応するデータ項目を「PIC S9(9) COMP-5」(4バイト)で定義しますが、64ビット版 Linuxでは、C言語インタフェースでsize_tやiconv_tで定義されている戻り値のサイズは8バイトとなるため、実行時に確保されていないメモリ域に書き込みが発生し、セグメンテーション違反となります。
この場合、対応するCOBOLのデータ項目は、「PIC S9(9) COMP-5」ではなく、「PIC S9(18) COMP-5」で定義する必要があります。同様に、関数に渡すパラメータも長さに注意してください。
製品・サービス情報
対象製品NetCOBOL
プラットフォームLinux Intel64, Linux Itanium
アンサー種別 運用/保守
このページの先頭へ