Как сделать ссылку на внешнюю библиотеку c с помощью ruby's mkmf? - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть следующие файлы в этом каталоге:

~/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 Ответ

2 голосов
/ 18 ноября 2011

Похоже, это связано с использованием ~ для указания домашнего каталога.Оболочка расширяет ~ до пути вашего домашнего каталога, если это первый символ слова.Когда mkmf создает командную строку для вызова компилятора для проверки существования библиотеки, он указывает каталог для вызова, используя опцию -L, и в итоге он выглядит как -L~/test/lib, и поэтому не раскрывается.Вы должны увидеть это в файле mkmf.log.

Исправление состоит в том, чтобы избежать использования символа ~ в пути к каталогу или обеспечить его расширение до использования в вызове компилятору..

Вы можете сделать это, изменив dir_config('','~/test') на:

dir_config('', File.expand_path('~/test'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...