.so文件的ruby LoadError

时间:2013-10-16 16:04:51

标签: ruby embedded-linux ld

我在嵌入式平台上使用ruby1.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)

有没有人对可能的原因有任何想法?

亲切的问候

史蒂夫

1 个答案:

答案 0 :(得分:1)

散步以清除头脑的力量....

问题在于在制作过程中链接库,而不是在目标机器上。

mkmf通过行

libruby.so中生成了makefile链接
LIBS = $(LIBRUBYARG_SHARED) -lsqlite3  -lrt -ldl -lcrypt -lm   -lc

删除libruby($(LIBRUBYARG_SHARED))会以某种微妙的方式更改生成的库(它小20个字节),然后允许ruby可执行文件找到并加载库。