Как связаться с внешней библиотекой 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'))
Другие вопросы по тегам