Отключить расширение ruby - PullRequest
       0

Отключить расширение ruby

1 голос
/ 16 ноября 2010

Я пытаюсь скомпилировать ruby ​​1.9.2-p0 из sctraches под Win7 x64 с Cygwin .. все почти нормально, все расширения компилируются, пока не достигнет win32ole ext, который завершается ошибкой со следующими ошибками:

win32ole.o: In function `load_conv_function51932':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
win32ole.o: In function `fole_activex_initialize':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:4762: undefined reference to `_IID_IPersistMemory'
win32ole.o: In function `mf_QueryInterface':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:597: undefined reference to `_IID_IUnknown'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:597: undefined reference to `_IID_IMessageFilter'
win32ole.o: In function `QueryInterface':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:699: undefined reference to `_IID_IUnknown'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:699: undefined reference to `_IID_IDispatch'
win32ole.o: In function `EVENTSINK_QueryInterface':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:7571: undefined reference to `_IID_IUnknown'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:7571: undefined reference to `_IID_IDispatch'
win32ole.o: In function `fole_each':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:4014: undefined reference to `_GUID_NULL'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:4031: undefined reference to `_IID_IEnumVARIANT'
win32ole.o: In function `load_conv_function51932':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
win32ole.o: In function `find_default_source':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:8174: undefined reference to `_IID_IProvideClassInfo2'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:8190: undefined reference to `_IID_IProvideClassInfo'
win32ole.o: In function `ev_advise':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:8308: undefined reference to `_IID_IConnectionPointContainer'
win32ole.o: In function `load_conv_function51932':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
win32ole.o: In function `ole_create_dcom':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:2615: undefined reference to `_IID_IDispatch'
win32ole.o: In function `fole_initialize':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3248: undefined reference to `_IID_IDispatch'
win32ole.o: In function `load_conv_function51932':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:934: undefined reference to `_CLSID_CMultiLanguage'
win32ole.o: In function `fole_respond_to':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:4516: undefined reference to `_GUID_NULL'
win32ole.o: In function `ole_variant2val':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:2262: undefined reference to `_IID_IDispatch'
win32ole.o: In function `ole_invoke':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3392: undefined reference to `_GUID_NULL'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3450: undefined reference to `_GUID_NULL'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3364: undefined reference to `_GUID_NULL'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3467: undefined reference to `_GUID_NULL'
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3506: undefined reference to `_GUID_NULL'
win32ole.o:/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:3481: more undefined references to `_GUID_NULL' follow
win32ole.o: In function `fole_s_connect':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:2718: undefined reference to `_IID_IDispatch'
win32ole.o: In function `ole_bind_obj':
/home/Jack/ruby-1.9.2-p0/ext/win32ole/win32ole.c:2656: undefined reference to `_IID_IDispatch'
collect2: ld returned 1 exit status
make: *** [../../.ext/i386-cygwin/win32ole.so] Error 1

make-файл собирает его через gcc со следующими параметрами:

gcc -shared -s -o ../../.ext/i386-cygwin/win32ole.so win32ole.o -L. -L ../ .. -L. -Wl, - enable-auto-image-base, - enable-auto-import -lruby191 -ladvapi32 -lkernel32 -luser32 -luuid -loleaut32 -lole32 -lpthread -lrt -ldl -lcrypt

Я не знаю, почему это происходит (возможно, ресурс заголовка недоступен), но на самом деле меня не слишком волнует это расширение (я не думаю, что буду его использовать), поэтому мне интересно, как отключить расширение win32ole из фазы make и просто пропустите его.

Полагаю, есть способ, но я не знаю, как ..

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 16 ноября 2010

Сделайте ./configure --help и отметьте варианты

--with-exts=EXTS
--with-out-ext=EXTS

У меня такая же настройка, Win 7 x86_64 с cygwin 1.7, и у меня не было проблем с созданием этого расширения. Командная строка gcc такая же, как ваша. В документах Microsoft упоминается файл mlang.dll, который можно проверить, я полагаю.

1 голос
/ 28 мая 2011

Это можно исправить, не отключая расширение.

Причина сбоя - ошибка времени соединения.Это не связано с тем, какие DLLS присутствуют в системном пути - это может привести к проблемам во время выполнения.Я столкнулся с этим после установки Cygwin 1.7.9-1.После установки cygwin / usr / lib содержал библиотечные файлы libuuid. *, Которые скрывают файлы с одинаковыми именами в / usr / lib / w32api, заглушки ссылок, которые взаимодействуют с DLL-библиотеками Windows API.Это предполагаемая цель кода расширения ruby.Это произошло либо потому, что они были недавно добавлены в дистрибутив cygwin, либо потому, что один из выбранных мной пакетов включал эти файлы.Я обошел это, изменив строку LIBPATH = -L.От -L $ (topdir) до LIBPATH = -L.-L $ (topdir) -L / usr / lib / w32api в Makefile в ext / w32ole в исходном коде ruby ​​после запуска configure, чтобы позволить компоновщику найти правильные файлы библиотеки после запуска configure.

Примечаниечто ext / w32ole / Makefile не будет виден, пока вы не запустите 'make' в первый раз.Как только вы это сделаете, Makefile виден и может быть скорректирован.Второй запуск команды make должен выполняться без ошибок.

1 голос
/ 22 мая 2011

Я столкнулся с тем же. Я не знал о параметрах ./configure. После различных исследований и испытаний я просто убрал каталог win32ole, и это, похоже, сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...