2015-09-28 2 views
4

Я написал плагин gstreamer, используя шаблон шаблона, оканчивающийся в руководстве для авторов плагинов gstreamer (http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-building-boiler.html). Я сначала построил плагин без полной реализации цепной функции (в основном пустой плагин, который передавал данные из источника, чтобы потоковаться без изменений).Ссылка на внешние библиотеки в плагине gstreamer с использованием autotools

Теперь я реализую функцию цепочки, чтобы выполнить базовую фильтрацию данных в буфере. В фильтрации используется внешняя библиотека заточки (которую я успешно использовал вне gstreamer). При строительстве с использованием Autotools я не получаю никаких ошибок, но при создании трубопровода с помощью нового плагина, я получаю неопределенную ошибку символ

(gst-plugin-scanner:6512): GStreamer-WARNING **: Failed to load plugin '/usr/local/lib/gstreamer-1.0/libgstsharpening.so': /usr/local/lib/gstreamer-1.0/libgstsharpening.so: undefined symbol: InitializeSharpeningModule 

я есть правда очень новый Autotools, и я полагаю, что моя проблема лежит где-то в этом процессе , но я не могу понять, где. Внешняя библиотека заточки используется, можно найти здесь

/public/gstreamer_pipeline/lib/libsharpening.so 

Я редактировал плагин Makefile.am находится в каталоге Src для моего плагина

/public/gstreamer_pipeline/src/gst-sharpening/src 

Содержимого редактируемого Makefile.am является

plugin_LTLIBRARIES = libgstsharpening.la 

libgstsharpening_la_SOURCES = gstsharpening.c gstsharpening.h 

libgstsharpening_la_CFLAGS = $(GST_CFLAGS) -I/public/gstreamer_pipeline/include 
libgstsharpening_la_LIBADD = $(GST_LIBS) -lsharpening 
libgstsharpening_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -L/public/gstreamer_pipeline/lib 
libgstsharpening_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) 

noinst_HEADERS = gstsharpening.h 

Неопределенная ошибка символа возникает в случае создания конвейера из основной программы или создания конвейера из командной строки с использованием

gst-launch-1.0 fakesrc ! sharpening ! fakesink 

Выход работает LDD на новый созданный плагин библиотеки (без изменения LD_LIBRARY_PATH) является

ldd /usr/local/lib/gstreamer-1.0/libgstsharpening.so 
    linux-vdso.so.1 => (0x00007fff17bc0000) 
    libgstbase-1.0.so.0 => /usr/local/lib/libgstbase-1.0.so.0 (0x00007f3c51778000) 
    libgstcontroller-1.0.so.0 => /usr/local/lib/libgstcontroller-1.0.so.0 (0x00007f3c51568000) 
    libgstreamer-1.0.so.0 => /usr/local/lib/libgstreamer-1.0.so.0 (0x00007f3c51250000) 
    libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x00007f3c5104d000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f3c50db0000) 
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f3c50bac000) 
    libgobject-2.0.so.0 => /usr/local/lib/libgobject-2.0.so.0 (0x00007f3c5095f000) 
    libffi.so.6 => /usr/local/lib/../lib64/libffi.so.6 (0x00007f3c50755000) 
    libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x00007f3c50420000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3c50203000) 
    librt.so.1 => /lib64/librt.so.1 (0x00007f3c4fffa000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f3c4fc67000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003406c00000) 

configure.log выход http://pastie.org/10450341

Выход замыкающих и сделать установку http://pastie.org/10450352

+1

так где же используется символ «InitializeSharpeningModule»? и где он определен (экспортер)? –

+1

Используется в функции chain() нового плагина, который я пытаюсь создать, и определяется в /public/gstreamer_pipeline/lib/libsharpening.so – RyanL

+0

У вас есть настройка LD_LIBRARY_PATH (или некоторые другие средства), чтобы сделать компоновщик времени выполнения смотрите в библиотеке '/ public/gstreamer_pipeline/lib /' для библиотек? –

ответ

1

Скорее всего, компоновщик/загрузчик времени выполнения не может найти вспомогательные библиотеки (libsharpening.so) на нестандартных путях (/public/gstreamer_pipeline/lib/).

(Вы говорите Automake, где искать эту библиотеку для связывающей шаг в наращивании процесса, это вовсе не означает, что выполнения линкер будет выглядеть на том же месте).

Существуют различные способы, чтобы исправить, что:

  • установить библиотеку в месте, где среда выполнения компоновщик будет выглядеть для него, например, /usr/local/lib/ (это хороший способ)

    • настроить среду выполнения линкер постоянно искать библиотеки в ваших нестандартных путях, добавив его в /etc/ld.so.config (или - если ваш Sytem поддерживает его - путем добавления его к новый файл /etc/ld.so.conf.d/gstreamer_pipeline.conf)
  • скажите выполнения линкер использовать дополнительный путь для библиотеки разрешающего, через переменную LD_LIBRARY_PATH окружающей среды.

например.

LD_LIBRARY_PATH=/public/gstreamer_pipeline/lib/ gst-launch-1.0 \ 
      fakesrc ! sharpening ! fakesink 
+0

У меня LD_LIBRARY_PATH, указывающий на нестандартное расположение библиотеки. Когда я запускаю ldd на подключаемом объекте плагина, который я создаю, он даже не показывает библиотеку /public/gstreamer_pipeline/lib/libsharpening.so как связанную. – RyanL

+0

добавьте вывод 'ldd libgstsharpening.so' (без LD_LIBRARY_PATH) к вашему * вопросу *. это также помогло бы, если бы вы могли опубликовать файл журнала сборки для некоторого [pastie] (http://pastie.org/) –

+0

Вопрос был обновлен, спасибо за предложения. – RyanL