問題
動的ライブラリと静的ライブラリの違いを直感的に理解しています。そうは言っても、サードパーティのライブラリを利用する C 拡張機能を作成しようとしています。このライブラリを静的と動的の両方でコンパイルし、extconf.rb で静的ライブラリを参照しています。明確にするために...
A = サードパーティの動的ライブラリ (理論的には使用されていません)
B = サードパーティの静的ライブラリ (extconf.rb で参照)
C = Ruby C 拡張
ここに問題があります。Ruby コードで C を要求すると、エラーが発生します。A が現在の作業ディレクトリにある場合、このエラーはスローされません。奇妙な。現在の作業ディレクトリに B があると、Ruby が混乱するようで、A を見つけることができません。
理想的には、システムに B がまったく存在しないようにしたいと考えています。私はそれをすべてCに隠したいと思っています。それが静的ライブラリが行うと思っていたことです。これは可能ですか?
コンテキスト
Windows7、Ruby2.0、DevKit、MinGW。サードパーティのライブラリはCGALであり、boost、mpfr、および gmp に依存しています。この拡張機能は、SketchUp の ruby API で使用することを目的としています。SketchUp の Ruby 拡張機能は、SketchUp インターフェイスを介してインストールされます。このインターフェイスは、関連するファイルを選択したディレクトリにコピーしてロードするだけです。私の extconf は次のようになります。
#extconf.rb
require 'mkmf'
dir_config("CGAL", "C:/CGAL-4.2/include", "C:/CGAL-4.2/bin")
have_library("CGAL")
dir_config("boost", "C:/boost/boost_1_54_0", "C:/boost/boost_1_54_0/stage/lib")
have_library("boost_thread-mgw47-mt-1_54")
have_library("boost_system-mgw47-mt-1_54")
dir_config("gmp", "C:/CGAL-4.2/auxiliary/gmp")
create_makefile( 'HW' )
require() の失敗
libCGAL.dll が見つからない場合、次の出力が得られます。現在の作業ディレクトリに配置すると、これが修正されます。
test.rb:2:in `require_relative': 126: No se puede encontrar el módulo especificado. -
C:/Users/Noel/code/tru-offset/HW.so (LoadError)from test.rb:2:in `<main>'