Как связаться с внешней библиотекой c с помощью ruby's mkmf?
У меня есть следующие файлы в этом каталоге:
~/test/lib/liblost.dylib
~/test/include/lost.h
Я пытаюсь разрешить моему rubygem определить, существует ли вышеуказанная библиотека, выполнив в irb следующее:
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 ответ
Похоже, это связано с использованием ~
указать домашний каталог. Оболочка только расширяется ~
к пути вашего домашнего каталога, если это первый символ слова. когда mkmf
создает командную строку для вызова компилятора для проверки существования библиотеки, которая определяет каталог для вызова с использованием -L
вариант, и в конечном итоге выглядит -L~/test/lib
и так не расширяется. Вы должны увидеть это в mkmf.log
файл.
Исправление состоит в том, чтобы избежать ~
символ в пути к каталогу, или убедитесь, что он расширяется до того, как он будет использован при вызове компилятора.
Вы можете сделать это, изменив dir_config('','~/test')
чтобы:
dir_config('', File.expand_path('~/test'))