Зависимости расширения Ruby C
проблема
У меня есть интуитивное понимание разницы между динамическими и статическими библиотеками. Тем не менее, я пытаюсь написать расширение C, которое использует стороннюю библиотеку. Я скомпилировал эту библиотеку как статически, так и динамически, и я ссылаюсь на статическую библиотеку в моем файле extconf.rb. Для ясности...
A = сторонняя динамическая библиотека (теоретически не используется)
B = сторонняя статическая библиотека (ссылка на extconf.rb)
C = Ruby C расширение
Вот в чем дело: когда мне требуется C в моем коде ruby, я получаю ошибку. Эта ошибка не выдается, если A находится в текущем рабочем каталоге. Wierd. Наличие B в текущем рабочем каталоге, похоже, сбивает с толку ruby и не может найти A.
В идеале я хочу, чтобы B вообще не присутствовал в системе. Я хотел бы, чтобы все это было спрятано в C. Это то, что я думал, что статическая библиотека сделала. Возможно ли это, и если да, то как это сделать?
Contexet
Windows7, Ruby2.0, DevKit, MinGW. Сторонней библиотекой является CGAL, которая, в свою очередь, опирается на boost, mpfr и gmp. Расширение предназначено для использования с ruby API SketchUp. Рубиновые расширения SketchUp устанавливаются через интерфейс 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>'