2011-11-15 4 views
3

私は、このディレクトリに次のファイルを持っている:ruby​​のmkmfを使って外部のCライブラリにリンクするには?

~/test/lib/liblost.dylib 
~/test/include/lost.h 

私は上記のライブラリはIRBで次のようにして存在している場合、私のrubygemを決定させるしようとしています:

ruby-1.9.2-p290 :008 > dir_config('','~/test') 
=> ["~/test/include", "~/test/lib"] 
ruby-1.9.2-p290 :009 > have_library('lost') 
checking for main() in -llost... no 
=> false 

誰かが理由を説明していただけますこれは動作していないのですか?

+1

あなたは 'liblost.dylib'が共有ライブラリですか? 'file liblost.dylib'は何を表示しますか? – matt

+0

liblost.dylib:Mach-Oの64ビット動的リンク共有ライブラリx86_64 – Coderama

答えて

2

これは、~を使用してホームディレクトリを指定したためです。シェルは、単語の最初の文字の場合は、ホームディレクトリのパスにのみ~を展開します。 mkmfは、ライブラリの存在を確認するためにコンパイラを呼び出すコマンドラインを構築すると、-Lオプションを使用して呼び出すディレクトリを指定し、-L~/test/libのようになり、拡張されません。 mkmf.logファイルでこれを確認できるはずです。

修正点は、ディレクトリパスに~文字が含まれないようにするか、コンパイラの呼び出しで使用される前に展開されるようにすることです。

あなたはへdir_config('','~/test')を変更することでこれを行うことができます:

dir_config('', File.expand_path('~/test')) 
関連する問題