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

散散步来理清头绪的力量……

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

mkmf 生成的 makefilelibruby.so通过该行链接

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

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

于 2013-10-17T08:16:10.430 回答