LINUX.ORG.RU

slackware: libpng14 <-> libpng12


0

0

недавно обновил систему со slackware 12.2 до 13.1. Так как KDESC 4 это нечто жуткое, поставил себе kde 3 из сборки /unsupported/kde-3.5.10-for-slack13.0/

но обнаружилась такая серьезная проблема. в 13.0 была библиотека libpng 1.2, и все было хорошо. в slackware 13.1 libpng обновилась до 1.4. после установки бинарников обнаружилось (ldd), что программы kde 3 используют libpng14.

как можно сделать так, чтобы kde3 использовал libpng12?

и вообще вопрос из теории программирования. пусть я скомпилировал программу, скажем, следующим образом: gcc main.c -lpng14

есть ли способ, изменить сам бинарник a.out таким образом, чтобы заменить в нем линк с libpng14 на libpng12?

есть какие-то проблемы из-за того что используется libpng 1.4 ?

в Slackware (-current) пакет новой libpng содержит как libpng14 (используется для сборки) так и старую libpng12 (используется для совместимости)

проблем ни с новыми, ни с старыми пакетами быть не должно

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

так, я извинияю. что-то вообще не то, получается.

cd /opt/kde3/bin
ldd * | grep libpng
        libpng.so.3 => /usr/lib64/../lib64/libpng.so.3 (0x00007fdf75d0e000)
        libpng.so.3 => /usr/lib64/../lib64/libpng.so.3 (0x00007f413765f000)
        libpng.so.3 => /usr/lib64/../lib64/libpng.so.3 (0x00007f7753adb000)
        .....

а что это за libpng.so.3? просто минут 10 назад смотрел, и мне казалось, что такой же grep выдавал мне сплошные 1.4

с самим кде, действительно, проблем нет. проблемы начались, когда я начал собирать разные программки для kde3. приходится как-то выкручиваться, из того положения, что они с libpng-1.4 работать не хотят. чтобы особо не мучится (хотя, наверное, это самый плохой вариант) я делаю так

cd /usr/include
ln -sf libpng12/png.h png.h
ln -sf libpng12/pngconf.h pngconf.h

cd /usr/lib64
ln -sf libpng12.a libpng.a
ln -sf libpng12.la libpng.la
ln -sf libpng12.so libpng.so

./configure && make && make install

cd /usr/include
ln -sf libpng14/png.h png.h
ln -sf libpng14/pngconf.h pngconf.h

cd /usr/lib64
ln -sf libpng14.a libpng.a
ln -sf libpng14.la libpng.la
ln -sf libpng14.so libpng.so

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

libpng.so.3 - старая библиотека совместимости, на самом деле обычно представляет собой libpng12 , т.к. более старые версии уже не поддерживаются совсем.

не совсем правильно делаете

в $prefix/bin ставится скрипт конфигурации

libpng-config
обычно это символическая ссылка на

libpng12-config
или
libpng14-config

в $prefix/include обычно делаются 2 симлинка на заголовки, их можно удалить

соответственно будете иметь
$prefix/include/libpng12
и
$prefix/include/libpng14

в $prefix/lib/pkgconfig/
лежат libpng12.pc и libpng14.pc
может быть также и симлинк libpng.pc на один из этих файлов

cоответственно для переключения надо переключить симлинки

libpng-config
libpng.pc
и возможно вынести симлинки на 2 заголовка png.h pngconf.h





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

cd /usr/lib64
ln -sf libpng12.a libpng.a
ln -sf libpng12.la libpng.la
ln -sf libpng12.so libpng.so


.la и .a файлы я бы вообще удалила
чтобы не было конфликтов с libtool после удаления .la файлов,
можно воспользоваться lafilefixer --justfixit
скачать тут - http://mirror.yandex.ru/gentoo-portage/dev-util/lafilefixer/files/lafilefixer...


ln -sf libpng12.so libpng.so
таким образом нужен только .so файл

проблемы у вас потому что забыли про libpng-config и libpng.pc

Sylvia ★★★★★ ()

Не совсем понял суть вопроса, но, возможно, вам поможет

 LD_PRELOAD=/usr/lib/libpng12.so <путь к запускаемой программе> 

Я так запускаю Фурифокс, потому что кваковский плугин косячит с libpng14.

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

но я правильно понимаю, что переключаю на libpng-12, потом компилирую и устанавливаю программу, а потом снова переключаю на libpng-14?

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

да, хотя «снова» можно и не переключать, а собирать все и дальше с 1.2

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

не помогло... или так и должно быть?

ldd /opt/kde3/bin/digikam
           libpng14.so.14 => /usr/lib64/../lib64/libpng14.so.14 (0x00007f9241b69000)

а вообще, png-картинки отображает. значит не в нем дело )

и снова crash...

[Thread debugging using libthread_db enabled]
[KCrash handler]
#5  0x00007fa64343a8dc in jpeg_CreateDecompress ()
   from /usr/lib64/../lib64/libjpeg.so.8
#6  0x00007fa6440ac608 in ?? () from /opt/kde3/lib64/libqt-mt.so.3
#7  0x00007fa643e24379 in QImageIO::read() ()
   from /opt/kde3/lib64/libqt-mt.so.3
#8  0x00007fa643e6086e in QPixmap::load(QString const&, char const*, int) ()
   from /opt/kde3/lib64/libqt-mt.so.3
#9  0x00007fa6495ef3a6 in Digikam::WorldMapWidget::worldMapPixmap() ()
   from /opt/kde3/lib64/libdigikam.so.0
#10 0x00007fa6495ef70c in Digikam::WorldMapWidget::WorldMapWidget(int, int, QWidget*) () from /opt/kde3/lib64/libdigikam.so.0
#11 0x00007fa6495ee346 in Digikam::GPSWidget::GPSWidget(QWidget*, char const*)
    () from /opt/kde3/lib64/libdigikam.so.0
#12 0x00007fa649685021 in Digikam::ImagePropertiesMetaDataTab::ImagePropertiesMetaDataTab(QWidget*, bool) () from /opt/kde3/lib64/libdigikam.so.0
#13 0x00007fa64967fa92 in Digikam::ImagePropertiesSideBar::ImagePropertiesSideBar(QWidget*, char const*, QSplitter*, Digikam::Sidebar::Side, bool, bool) ()
   from /opt/kde3/lib64/libdigikam.so.0
#14 0x00007fa649680497 in Digikam::ImagePropertiesSideBarDB::ImagePropertiesSideBarDB(QWidget*, char const*, QSplitter*, Digikam::Sidebar::Side, bool) ()
   from /opt/kde3/lib64/libdigikam.so.0
#15 0x00007fa6494dc977 in Digikam::DigikamView::DigikamView(QWidget*) ()
   from /opt/kde3/lib64/libdigikam.so.0
#16 0x00007fa649472287 in Digikam::DigikamApp::setupView() ()
   from /opt/kde3/lib64/libdigikam.so.0
#17 0x00007fa64947c43d in Digikam::DigikamApp::DigikamApp() ()
   from /opt/kde3/lib64/libdigikam.so.0
#18 0x0000000000402db4 in main ()

видимо теперь дело в jpeg

travise ()
Ответ на: комментарий от Sylvia

проблемы у вас потому что забыли про libpng-config и libpng.pc

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

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


ldd /opt/kde3/bin/digikam
libpng14.so.14 => /usr/lib64/../lib64/libpng14.so.14 (0x00007f9241b69000)

значит так собрали с libpng14

или что-то другое его тянет , kdelibs, exiv2, libkexiv, kipi, qt ...

падать тоже кстати ничего не должно, смесь библиотек png и jpeg все-таки уживаются, если приложение не делает внутреннюю проверку

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

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

спасибо вам большое! сейчас буду пытаться исправить)

а про kde-sunset - вы, в смысле, предлагаете весь kde пересобрать?

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

kde-sunset на тот случай если решитесь собрать старое кде, с новыми библиотеками целиком сами , патчи там лежат в files/

хотя если у вас чужая бинарная сборка, то глючить сильно она не должна, падать она может и по другим причинам нежели конфликт с графическими библиотеками, кроме них еще есть другие


Sylvia ★★★★★ ()

В генте собрал новый libpng14, сделал на него симлинк и симлинк назвал libpng12 - всё работает. Ну примерно так.

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

таким способом как раз легче всего получить падение приложений,
с jpeg такое не пройдет )

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

и кстати в генте есть слот для старой версии 1.2, ставится только библиотека , без заголовков и прочего, просто для совместимости,
также как и пакет в слаке.

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

Тьфу-тьфу-тьфу, ничего не упало. А вот способ обновления, описанный в одном из блогов с gentoo.org не прокатил =(

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