Armadilloフォーラム

Ruby 拡張ライブラリ で-lruby2.0.0 リンクについて

y-otuki

2014年8月7日 19時54分

大槻です

いつもお世話になってます。

現在Rubyの拡張ライブラリを作成しています。

ATDE5上での実行は確認できたのですが。

Armadillo-840側にはruby2.0.0がインストールされていて 下記エラーがでて、
クロスコンパイル(リンク時)に-lruby2.0.0が見つからずでつまずいています。

atmark@atde5:~/src/sample/rubylib$ make -f ARM_Makefilelinking shared-object sharemem.so
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lruby-2.0.0
collect2: ld returned 1 exit status
make: *** [sharemem.so] エラー 1

386用とARM用のmakefileを添付します。

環境
開発環境:ATDE5
ruby1.9.1
ターゲット:Armadillo-840(atmark-dist-20140602)
ruby2.0.0

このエラーの対策などについて、ご存知の方がいましたらご教授 お願いします。

以上、よろしくお願いいたします。

ファイル ファイルの説明
ARM_Makefile.ZIP 386用とARM用のmakefile
コメント

ロームの大岡と申します。

もしかするとARM用Makefileはライブラリの検索パスが適切に設定されてないのではないでしょうか?

リンクしている箇所を確認すると、

$(DLLIB): $(OBJS) Makefile
    $(ECHO) linking shared-object $(DLLIB)
    @-$(RM) $(@)
    $(Q) $(LDSHAREDXX) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)

↑ライブラリ検索パスはLIBPATHで指定しています。
LIBPATHがどうなっているか辿ると下記のようになっています。

LIBPATH =  -L. -L$(libdir)
libdir = $(exec_prefix)/lib
exec_prefix = $(prefix)
prefix = $(DESTDIR)/usr

DESTDIRは設定されていないようなので、ライブラリ検索パスはカレントディレクトリと/usr/libになっています。
しかしARM_Makefileの内容からすると、ARM用のrubyライブラリは/home/atmark/atmark-dist-20140602/user/ruby/ruby-2.0.0-p451/ 以下のどこかにあるのではないでしょうか?
そこがLIBPATHに追加されるようにMakefileを設定してみてはどうでしょうか。

大岡 殿

大槻です。

ご教授、ありがとうございます。

ご指摘どおり、Makefileを見なおして無事解決することが出来ました。

その際のMakefileを添付しておきます。

以上、 ありがとうございました。

ファイル ファイルの説明
ARM_Makefile.ZIP