HP-UX General
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

iconv(3C)について

 
Highlighted
新しいメンバー

iconv(3C)について

いつも、参考にさせていただいています。

現在、日立のメインフレームとデータの送受信を行うプログラムを作成しているのですが、64ビットモードで作成するとiconv_openで異常値(-1)が戻り、困っています。

32ビットモードだとうまくいったのですが、今回はどうしても64ビットモードで作成しなくてはならないので

ほとほと困りはてています。

お知恵を拝借させてください。

環境 HP-UX11i

言語 C言語

6件の返信6
Highlighted
尊敬されているコントリビューター

iconv(3C)について

man iconv_open より、

戻り値

iconv_open() 正常終了すると、 iconv_open() はその後の iconv()

呼出しに使用する変換記述子を返します。異常終了する

と、 iconv_open() は (iconv_t)-1 を返して、エラー

を示す値を errno にセットします。

外部変数の errno はどんな値になっていますか?

Highlighted
新しいメンバー

iconv(3C)について

errno には22が戻ってきます。

今現在、調べた所、どうも64ビットモードの変換用

のライブラリが無いみたいです。(32ビットモードのライブラリはありました)

標準では、入っていないものなのでしょうか?
Highlighted
尊敬されているコントリビューター

iconv(3C)について

勘違いしているかも知れませんが、ライブラリはあると思います。

$cc +DD64 foo.c

$elfdump -L a.out

a.out:

*** DYNAMIC Section ***

.dynamic:

Index Tag Value

0 Needed libc.2

1 Rpath /usr/lib/pa20_64:/opt/langtools/lib/pa20_64:

2 Flags 0x0

3 Hook 0x0

4 Link tab 0x80000001000001d8

5 Hash 0x4000000000000ac0

6 Dynstr 0x4000000000000880

7 Dynsym 0x40000000000003d0

8 GSTHshVl 0x4000000000000f98

9 GSTVersn 0x1

10 HPTime Wed Jul 28 19:21:54 2004

11 HPChksum 0x5cfaaab8

12 Rela 0x4000000000000bf8

13 Relasz 0x240

14 Pltrel 0x7

15 Jmprel 0x4000000000000d78

16 Pltrelsz 0xc0

17 Relaent 0x18

18 Strsz 0x23e

19 Syment 0x18

20 Load map 0x80000001000001d8

$nm /usr/lib/pa20_64/libc.sl | grep iconv

| 9223372041149801120| 8|OBJT |GLOB |0| .sdata|__iconv_path

| 4611686018428462328| 92|FUNC |LOCAL|0| .text|_iconv

| 4611686018428462080| 244|FUNC |LOCAL|0| .text|_iconv_close

| 4611686018428462424| 1716|FUNC |LOCAL|0| .text|_iconv_open

| 9223372041149839472| 88|OBJT |GLOB |0| .bss|_iconv_rmutex

| 4611686018428462328| 92|FUNC |WEAK |0| .text|iconv

| 4611686018428462080| 244|FUNC |WEAK |0| .text|iconv_close

| 4611686018428462424| 1716|FUNC |WEAK |0| .text|iconv_open

Highlighted
新しいメンバー

iconv(3C)について

失礼しました。書き方が悪かったようです。

ライブラリーがないといっているのは、

変換用の共有ライブラリが見つからないのです。

/usr/lib/nls/iconv/config.iconvの中身で

keis8k<->sjisの変換用のライブラリ

"libkeishp15.sl"と"libsjiskeis.sl"は、32ビットモードのライブラリでこれに該当する64ビットのライブラリが見つからないのです。(探し方が悪いのかもしれませんが)

Highlighted
尊敬されているコントリビューター

iconv(3C)について

それなら、以下のパッチでOKです。

PHSS_29031

s700_800 11.11 Asian Printer/Utility cumulative patch

1.

Japanese shared libraries of 64 bit for code conversion

does not exist in /usr/lib/nls/iconv/pa20_64/methods.2.

Therefore, customer's 64-bit program with iconv_open(3C)

got the error.

Highlighted
新しいメンバー

iconv(3C)について

ありがとうございました。

おかげで、無事解決へ向かう事が出来ます。