トップページ > 記事閲覧
AqKanji2Koe を ruby からロードできない
日時: 2014/03/16 14:23
名前: 井上 清晃
参照: https://gist.github.com/saronpasu/9578872

度々、失礼します。

井上 清晃(いのうえ きよてる)と言います。

AqKanji2Koe(linux 64bit)のライブラリを
ruby からロードしようとしたところ。
"can't load" となり、読み込みが行えませんでした。

なお、 AquesTalk2(linux 64bit)ライブラリは
同様の方法で ruby からロードでき、実行もできています。
AquesTalk2ライブラリを読み込むことができたのに。
AqKanji2Koeライブラリを読み込むことができなかったので。
ruby 側ではなく、ライブラリ側の問題ではないかと推測しています。

使用したテストコードをURLで記載しておきます。
↓AqKanji2Koe ロードに失敗したコード↓
https://gist.github.com/saronpasu/9578872

↓AquesTalk2 ロードと実行に成功したコード↓
https://gist.github.com/saronpasu/9565563

ご多忙かと存じますが。
ご対応のほど、よろしくお願いいたします。
メンテ

Page: 1 |

Re: AqKanji2Koe を ruby からロードでき ( No.1 )
日時: 2014/03/24 15:02
名前: 管理人

Rubyは知らないのでなんともいえませんが、

ライブラリのロード時のエラーとなると、
AquesTalk2とAqKanji2Koe Linuxの違いとして、
後者は、依存ライブラリとして、libc.so.6のほかに、libgcc_s.so.1も使用している点くらいでしょうか。
メンテ
Re: AqKanji2Koe を ruby からロードできない ( No.2 )
日時: 2014/03/24 23:28
名前: 井上 清晃
参照: https://gist.github.com/saronpasu/9741124

ご返答ありがとうございます。

libgcc_s.so.1 に関しては、 Ruby からロードを行うこともできます。
Ruby 実行環境で、 libgcc_s.so.1 が認識できない状況ではないようです。

AqKanji2Koe をロード時に Ruby からデバッグ出力を行ったところ。次のようなエラーメッセージが出力されました。

---------------------

libAqKanji2Koe.so.2.0: undefined symbol:_ZTVN10__cxxabiv120__si_class_type_infoE

---------------------

Ruby内部からは、未定義のシンボルを呼び出されたようにデバッグ出力されています。
このデバッグメッセージの意味は理解できませんが。
もし、原因究明の一助となるのでしたら。
再度、ご対応のほど、お願いいたします。

念の為、Ruby2.1 にて。libgcc_s.so.1 がロードできたコードを掲載します。
https://gist.github.com/saronpasu/9741091

Ruby2.1 にて、 AqKanji2Koe を デバッグ出力でロードした際のコードを掲載します。
https://gist.github.com/saronpasu/9741124


ご多忙かと存じますが。
どうぞよろしくお願いいたします。
メンテ
Re: AqKanji2Koe を ruby からロードできない ( No.3 )
日時: 2014/03/25 15:19
名前: 管理人

「ZTVN10__cxxabiv120__si_class_type_infoE」というシンボルは、AqKanj2Koeから直接呼び出していないので、libgcc_s.so.1ライブラリの環境依存の可能性がありますね。
この場合rubyでなくても、単にGCCでCのプログラムをリンクした場合にも同様のエラーが出るものと思います。

お使いのLinuxのディストリビューションおよびバージョンは何でしょう?

今のAqKanji2Koe Linuxは、CenOS6.5 64bit版でビルド、動作確認していますので、ちょっと古い環境ではリンクできないかもしれません。
メンテ
Re: AqKanji2Koe を ruby からロードできない ( No.4 )
日時: 2014/03/25 15:26
名前: 井上 清晃
参照: https://gist.github.com/saronpasu/9741124

使っている Linux ディストリビューションは Ubuntu 13.10(64bit)です。


------------------------------
$ uname -a
Linux Ubuntu-Desktop 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
コアあたりのスレッド数:2
ソケットあたりのコア数:4
Socket(s): 1
NUMAノード: 1
ベンダーID: GenuineIntel
CPUファミリー: 6
モデル: 60
ステッピング: 3
CPU MHz: 800.000
BogoMIPS: 6186.15
仮想化: VT-x
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2 キャッシュ: 256K
L3 キャッシュ: 8192K
NUMA node0 CPU(s): 0-7
------------------------------

となります。
特別、古い環境というわけではないと思います。
度々、お手数をおかけしますがよろしくお願いいたします。
メンテ
Re: AqKanji2Koe を ruby からロードできない ( No.5 )
日時: 2014/03/26 15:26
名前: 管理人

Undefinedの関数は、libgcc_sの関数ではなくて、libstdc++の関数でした。

AqKanji2Koeのdlloadの前に、libstdc++.so.6 もロードしてください。(ファイルパスは環境に応じて)
ex)

dlload '/usr/lib/x86_64-linux-gnu/libstdc++.so.6'
dlload 'libAqKanji2Koe.so.2.0'

たぶんこれで良いかと・・・

メンテ
Re: AqKanji2Koe を ruby からロードできない ( No.6 )
日時: 2014/03/26 16:34
名前: 井上 清晃
参照: https://gist.github.com/saronpasu/9778347

早速の対応、ありがとうございます。

> AqKanji2Koeのdlloadの前に、libstdc++.so.6 もロードしてください。(ファイルパスは環境に応じて)
ex)
>
> dlload '/usr/lib/x86_64-linux-gnu/libstdc++.so.6'
> dlload 'libAqKanji2Koe.so.2.0'
>
> たぶんこれで良いかと・・・

はい。ご指摘頂いた対応方法で、ロードが行えることが確認できました。
ありがとうございました。

正常にロードできたコードを書いておきます。
https://gist.github.com/saronpasu/9778347
メンテ

Page: 1 |

題名 スレッドをトップへソート
名前
URL
パスワード (記事メンテ時に使用)
コメント
CAPTCHA captcha画像 ←英数字を入力

   クッキー保存