1

組み込みプラットフォームで ruby​​1.8.7 を使用しており、ruby sqlite3 gem をプラットフォームに移植しようとしています。

基礎となる sqlite3_native.so が正常に作成され、ターゲットにインストールされます。ldd は、すべての依存関係が満たされていることを示します。ただし、ロードしようとすると、LoadError (ファイルが見つかりません) が発生します。同じディレクトリ内の他の .so ライブラリは正常にロードされます。

#ls -l
total 167
lrwxrwxrwx    1 root     root             7 Oct 10 16:24 di.so -> di.so.5
-rw-r--r--    1 root     root         16540 Oct 10 15:29 di.so.5
-rwxrwxrwx    1 root     root         37916 Mar  6  2012 serialport.so
-rwxrwxrwx    1 root     root         51375 Oct 16 17:25 sqlite3_native.so

#[path_to_ruby]/bin/ruby -r ./di -e exit
#
#[path_to_ruby]/bin/ruby -r ./serialport -e exit
#
#[path_to_ruby]/bin/ruby -r ./ssqlite3_native -e exit
./sqlite3_native.so: File not found - ./sqlite3_native.so (LoadError)

考えられる原因について考えている人はいますか?

敬具

スティーブ

4

1 に答える 1

1

頭をすっきりさせる散歩の力…。

問題は、ターゲット マシンではなく、make プロセスでのライブラリのリンクにあります。

mkmf によって生成された makefile は、次libruby.soの行を介してリンクします。

LIBS = $(LIBRUBYARG_SHARED) -lsqlite3  -lrt -ldl -lcrypt -lm   -lc

libruby ( $(LIBRUBYARG_SHARED)) を削除すると、生成されたライブラリが微妙な方法で変更され (20 バイト小さくなります)、ruby 実行可能ファイルがライブラリを見つけてロードできるようになります。

于 2013-10-17T08:16:10.430 に答える