私はRubyのFFIを使ってGoogleシティハッシュの宝石に付けようとしています。デフォルトのRubyハッシュ関数(murmur_hash 1)に似た、64ビット、128ビットの非暗号化ハッシュですが、もう少し新しいものです。さらに重要なことは、ハッシュにシードを設定できることです。GoogleのCityhash gemはなぜインストールされませんか?
私は私のMac上のデフォルト./configure
を使用して/usr/local/lib
にcityhashをインストールしました。 これは、/usr/local/lib
にいくつかのライブラリを置く:私は、Mac OS X. を使用しています
-rwxr-xr-x 1 root wheel 13720 Jul 11 15:16 /usr/local/lib/libcityhash.0.dylib
-rw-r--r-- 1 root wheel 43424 Jul 11 15:16 /usr/local/lib/libcityhash.a
lrwxr-xr-x 1 root wheel 19 Jul 11 15:16 /usr/local/lib/libcityhash.dylib -> libcityhash.0.dylib
-rwxr-xr-x 1 root wheel 977 Jul 11 15:16 /usr/local/lib/libcityhash.la
gccのバージョンでは、デフォルトのMacのgccされていない4.6ですが、私は、あまりにもすることを試みました。
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.6.0]
FFI(Macのデフォルトのgccでインストールされ、GCC 4.6が動作しない?)
私は私ができる最も簡単なモジュール製:
require 'ffi'
module MyCityHash
extend FFI::Library
ffi_lib 'cityhash'
attach_function :CityHash64, [:string, :size_t], :uint64
end
を私は、しようとすると、任意のRubyのクラスやスクリプトファイルにこのモジュール私はエラーを取得する:
/Users/charlesmartin/.rvm/gems/ruby-1.9.2-p180/gems/ffi-1.0.9/lib/ffi/library.rb:147:in `attach_function': Function 'CityHash64' not found in [libcityhash.dylib] (FFI::NotFoundError)
CityHash64は内の署名を持っていますcity.h:
uint64 CityHash64(const char *buf, size_t len);
私は非常にこれをデバッグする方法上の任意の洞察力をいただければ幸いです。
おかげで機能を公開するcityhashのメンテナを説得できない限り、オプション#1を使用する必要があります。私は働くことができませんでしたが、2はうまくいきます。 – Charles