Недавно я унаследовал разработку проекта Ruby on Rails, направленную на предоставление пользовательского интерфейса двум пользовательским библиотекам, которые предоставляют некоторые расширенные функции анализа изображений.
Когда я запускаю сервер webrick, он, кажется, работает, но как только я пытаюсь загрузить какое-то изображение и использовать общие объекты, я получаю:
> MagickppAPI::LoadImagesList
> Magick::readImages
ruby: symbol lookup error: /usr/local/lib/site_ruby/1.8/i486-linux/cargadorlib.so: undefined symbol: CloneImageInfo
Я попытался передать —no-undefined при компиляции библиотек, поэтому он не допускает неопределенные символы, но он успешно компилируется. Кроме того, ldd не показывает неопределенные символы для этой библиотеки:
nobill@ubuntu-10:/usr/local/lib/site_ruby/1.8/i686-linux$ ldd cargadorlib.so
linux-gate.so.1 => (0xb77ca000)
libruby1.8.so.1.8 => /usr/lib/libruby1.8.so.1.8 (0xb769a000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7681000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb767c000)
libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb764a000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7555000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb752f000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb73d0000)
/lib/ld-linux.so.2 (0xb77cb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb73b0000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb73a7000)
Я знаю, что мой вопрос очень специфичен, поэтому я не обязательно ожидаю волшебного ответа; Я буду рад, если кто-нибудь разместит предложения о том, где может быть проблема.
Наконец-то удалось выяснить, что происходит. Опечатка в флаге no — undefined (на самом деле это Wl, — no-undefined) не позволяла мне понять, что мне не хватает некоторых библиотек для ссылки: -lMagick ++ -lMagickWand -lMagickCore
Других решений пока нет …