LINUX.ORG.RU

Сборка mplayer из исходников, ошибка линкера «undefined reference» для функций Xorg

 , , ,


0

1

Приветствую, форумчане!

Задался я целью собрать mplayer под Debian Jessie со своими опциями (в дебиановском не работает вывод в графической консоли через фреймбуфер).

Скачал последнюю версию исходников по адресу http://mplayerhq.hu/MPlayer/releases/MPlayer-1.3.0.tar.xz .

Много чего поправил, медленно продвигаясь вперёд в процессе компиляции, но вот дошёл до такого сообщения линковщика:

/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86GetOptValBool'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `XNFalloc'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `XNFcalloc'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `ErrorF'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86Int10AllocPages'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86LoadSubModule'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86CVTMode'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ValidateModes'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86DrvMsgVerb'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86PrintModes'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86CheckModeForMonitor'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86Int10FreePages'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86DrvMsg'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86InterpretEDID'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86FreeInt10'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86int10Addr'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ExtendedInitInt10'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ExecX86int10'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `XNFasprintf'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86FindScreenForEntity'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ModeStatusToString'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ErrorFVerb'
/usr/lib/xorg/modules/libvbe.so: undefined reference to `xf86ProcessOptions'
collect2: error: ld returned 1 exit status
Makefile:748: ошибка выполнения рецепта для цели «mplayer»
make: *** [mplayer] Ошибка 1

Понятно, что не подключены какие-то библиотеки, экспортирующие 23 перечисленные выше функции.

Поискал в библиотеках, 7 функций таки нашёл в /usr/lib/x86_64-linux-gnu/libXfont.so.1 и в /usr/lib/xorg/modules/libint10.so . А вот оставшиеся 16: xf86GetOptValBool, XNFalloc, XNFcalloc, xf86LoadSubModule, xf86CVTMode, xf86ValidateModes, xf86DrvMsgVerb, xf86PrintModes, xf86CheckModeForMonitor, xf86DrvMsg, xf86InterpretEDID, XNFasprintf, xf86FindScreenForEntity, xf86ModeStatusToString, xf86ErrorFVerb и xf86ProcessOptions + 17-ая ErrorF, найденная также в libXfont.so.1, были найдены в программе /usr/bin/Xorg .

Собственно вопросы:

1. Как подключить к проекту Xorg, чтоб эти функции увидел линкер? Ведь это не библиотека, и опция типа -lXorg не прокатит.

2. Как говорилось выше, функция ErrorF присутствует и в libXfont.so.1 (там она помечена как Weak), также реализована в заголовке /usr/include/X11/Xtrans/Xtransint.h (именно реализована, а не просто объявлена, т. е. с телом), и в /usr/bin/Xorg (где уже имеет пометку Text, а не Weak). Не чревато ли это конфликтами? Насколько я понимаю, Weak-функции могут появляться сколько угодно раз, а вот Text - не более одного. Или я ошибаюсь?

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

P.S. На самом деле, отвлекаясь от проблем mplayer'а, в общем виде 1-й вопрос можно переформулировать так: есть некая библиотека libvbe.so (ну или просто некая библиотека, неважно какая), которая содержит ссылки на некие внешние функции, реализованные не в какой-то другой библиотеке, а в исполняемой программе Xorg. Можно ли каким-то образом объяснить это линкеру, чтоб он не ругался?

Ответ на: комментарий от anonymous

Да и зачем ты бинарники грепаешь? Ищи в хидерах.

anonymous ()

Если у тебя комп слабый, то в иксах через xv/opengl/vdpau/vaapi меньше тормозить будет. Если просто так поиграться, то mpv drm моднее и молодёжнее.

anonymous ()

На mplayer и mplayer2 большинство забило уже. Разрабатывают mpv в качестве преемника. На фреймбуфер тоже забили. Так что удачи, но занимаешся ты ерундой.

Jameson ★★★★ ()
Ответ на: комментарий от anonymous

#comment-12931315

Выкинь каку.

Имеется в виду драйвер caca и опция сборки

./configure --disable-caca
или что-то другое?

Если --disable-caca, то как этот текстовый драйвер может быть связан с моими сплошь графическими иксовыми функциями?

#comment-12931315

Причём тут mplayer2, вообще?

Да, сорри, поставил лишнюю метку.

#comment-12931321

Да и зачем ты бинарники грепаешь? Ищи в хидерах.

Хидеры я тоже грепал, иначе не узнал бы, что тело функции ErrorF также реализовано в заголовке /usr/include/X11/Xtrans/Xtransint.h. Однако в данном случае речь идёт об ошибках линкера, а ему не важно, что в каком заголовке объявляется, он работает с объектниками и библиотеками.

#comment-12931348

Если у тебя комп слабый, то в иксах через xv/opengl/vdpau/vaapi меньше тормозить будет.

Спасибо за информацию, буду знать. А нужно и для производительности, и просто так, ради интереса.

#comment-12931348

Если просто так поиграться, то mpv drm моднее и молодёжнее.

Спасибо, буду знать. Но раз уж начал с mplayer'а (и успел уже потратить на него некоторое время), то хорошо бы сначала разобраться с ним, а уже потом пересобирать mpv и другие программы.

aureliano15 ★★ ()
Ответ на: комментарий от Harald

спроси в рассылке mplayer-а лучше

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

aureliano15 ★★ ()
Ответ на: комментарий от Jameson

На mplayer и mplayer2 большинство забило уже. Разрабатывают mpv в качестве преемника. На фреймбуфер тоже забили. Так что удачи, но занимаешся ты ерундой.

Ну, раз уж пошла такая пьянка, то большинство вообще маздай юзают, ещё процентов 10 - мак, а Линуксом пользуются 1-2%. Поэтому если считать ерундой всё, чем не пользуется большинство, то все мы здесь этой самой ерундой занимаемся, а настоящие мужчины выбирают Windows! :-)

aureliano15 ★★ ()
Ответ на: комментарий от aureliano15

большинство вообще маздай юзают

От этой демагогии нерабочий заброшенный код не становится рабочим. Если ты готов лично переписать уйму связанного с директфреймбуффером и прочим антиквариатом кода под современный дрм и таким образом реанимировать всё это - удачи. Я буду тобою восхищён.

Просто большинству пользующихся линуксом программистов всё это не нужно оказалось. Ты сможешь в одно лицо переломить тенденцию?

Jameson ★★★★ ()
Ответ на: комментарий от Jameson

Если ты готов лично переписать уйму связанного с директфреймбуффером и прочим антиквариатом кода под современный дрм и таким образом реанимировать всё это - удачи.

Судя по некоторым ответам к вопросу по ссылке Настройка видео в консоли через фреймбуфер в Debian Jessie 8.5 amd64, ядро 3.16.0-4-amd64, видяха nvidia C67, драйвер nouveau , у людей реально работает драйвер vesafb, и они реально смотрят видео в консоли с помощью mplayer. Не думаю, что у них какой-то совсем уж архаичный софт. А значит проблема не в mplayer, а в сочетании mplayer и debian. Но Debian - это Линукс, а значит, если есть дистры, где эта проблема решена «из коробки», значит и в Debian она должна решаться малой кровью. Такова моя логика.

aureliano15 ★★ ()
Ответ на: комментарий от aureliano15

Судя по некоторым ответам к вопросу по ссылке Настройка видео в консоли через фреймбуфер в Debian Jessie 8.5 amd64, ядро 3.16.0-4-amd64, видяха nvidia C67, драйвер nouveau , у людей реально работает драйвер vesafb, и они реально смотрят видео в консоли с помощью mplayer.

Да. Древний mplayer работает с древним фреймбуфером. И это единственное, что работает. Пока работает. Я ковырял это, лет пять назад. Оно уже тогда было полумертво и я забил. Видео в консоли и я крутил, а для остального надобился мёртвый уже тогда директфб. И с тех пор к лучшему ничего не менялось.

Jameson ★★★★ ()
Последнее исправление: Jameson (всего исправлений: 1)

Не знаю, как у вас в Дебиане, а у нас в Федоре mplayer -vo fbdev2 замечательно работает безо всяких пересборок. Кроме того, когда мне приспичивает пересобрать что-либо, имеющееся в дистрибутиве, я беру дистрибутивный пакет с исходниками, который уж точно можно собрать штатными средствами, и вношу изменения в него.

dexpl ★★★★★ ()
Ответ на: комментарий от Jameson

Я ковырял это, лет пять назад. Оно уже тогда было полумертво и я забил. Видео в консоли и я крутил, а для остального надобился мёртвый уже тогда директфб.

Понял. Спасибо за информацию. Но я всё-таки ещё попробую поковыряться, - вдруг что выйдет? :-)

Кстати, directfb в дебиановском mplayer'е включён и даже иногда работает, правда криво. Я же хочу включить fbdev, который мне советовали.

aureliano15 ★★ ()
Ответ на: комментарий от dexpl

Не знаю, как у вас в Дебиане, а у нас в Федоре mplayer -vo fbdev2 замечательно работает безо всяких пересборок.

Спасибо за информацию. А Федора свежая? (а то здесь высказывалась версия о том, что де все дистры, на которых это работает - древние).

Касательно fbdev2, то в последней версии исходников 1.3.0 в ./configure его почему-то нет. Вижу опцию сборки --enable-fbdev, а опция --enable-fbdev2 отсутствует. Возможно, --enable-fbdev включает также и fbdev2. Но, в любом случае, fbdev, говорят, тоже нормально работает.

aureliano15 ★★ ()
Ответ на: комментарий от aureliano15

А Федора свежая?

Да, 24-я; mplayer 1.3.0. Насчет опций не знаю, но в выводе mplayer -vo help присутствуют и fbdev, и fbdev2. Первый не работает ни в текстовой консоли, ни в иксах, второй работает и там, и там.

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

А Федора свежая?

Да, 24-я; mplayer 1.3.0.

Спасибо за информацию. Значит и в Дебиан проблема решаемая.

aureliano15 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.