我在嵌入式平台上使用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)
有没有人对可能的原因有任何想法?
亲切的问候
史蒂夫
答案 0 :(得分:1)
散步以清除头脑的力量....
问题在于在制作过程中链接库,而不是在目标机器上。
mkmf通过行
在libruby.so
中生成了makefile链接
LIBS = $(LIBRUBYARG_SHARED) -lsqlite3 -lrt -ldl -lcrypt -lm -lc
删除libruby($(LIBRUBYARG_SHARED)
)会以某种微妙的方式更改生成的库(它小20个字节),然后允许ruby可执行文件找到并加载库。