LINUX.ORG.RU

Как указать альтернативу библиотеке из /usr/lib при сборке?


0

0

Решил кое-что пропатчить в gtk2. После ковыряния в исходниках успешно
собрал и установил его с --prefix=~/patches/usr. Теперь пытаюсь
собрать gtk-theme-switch для проверки (то, что я патчил, касается
тем). Его Makefile сводится к команде

cc -o switch2 switch.c `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`

при этом

[gtk-theme-switch-2.0.0rc2]> pkg-config --cflags gtk+-2.0 
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-
1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib
-2.0 -I/usr/lib/glib-2.0/include
[gtk-theme-switch-2.0.0rc2]> pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocai
ro-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

Как мне собрать switch, используя хидеры и библиотеку моего нового
gtk? Я пытался сделать так:

[gtk-theme-switch-2.0.0rc2]> cat domake.sh
#!/bin/bash
gcc -o switch switch.c -I/home/lfs/patches/usr/include/gtk-2.0 \
-I/home/lfs/patches/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 \
-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 \
-I/usr/lib/glib-2.0/include -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 \
-lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 \
-ldl -lglib-2.0 $* 
[gtk-theme-switch-2.0.0rc2]> ./domake.sh ~/patches/usr/lib/libgtk-x11-2.0.so
[gtk-theme-switch-2.0.0rc2]> ldd switch | grep gtk
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7ad3000)

т.е., он слинковался не с той библиотекой, хотя я прямо указал ему с
какой надо. Ну и вдобавок

[gtk-theme-switch-2.0.0rc2]> switch2 -p ~/patches/theme/
/home/lfs/theme//gtk-2.0/gtkrc:28: error: invalid identifier `light',
expected valid identifier

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

Re: Как указать альтернативу библиотеке из /usr/lib при сборке?

PKG_CONFIG_PATH поставь в твою $pfx/lib/pkgconfig и собирай как раньше.

e ()

Re: Как указать альтернативу библиотеке из /usr/lib при сборке?

Не помогает:
[gtk-theme-switch-2.0.0rc2]> export
PKG_CONFIG_PATH=~/patches/usr/lib/pkgconfig/
[gtk-theme-switch-2.0.0rc2]> pkg-config --libs gtk+-2.0
-L/home/lfs/patches/usr/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0
-lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo
-lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
[gtk-theme-switch-2.0.0rc2]> pkg-config --cflags gtk+-2.0
-I/home/lfs/patches/usr/include/gtk-2.0
-I/home/lfs/patches/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0
-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0
-I/usr/lib/glib-2.0/include
[gtk-theme-switch-2.0.0rc2]> make
cc -o switch2 switch.c -O2 -Wall
-I/home/lfs/patches/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-DGTK_DISABLE_BROKEN -DGTK_DISABLE_DEPRECATED
-L/home/lfs/patches/usr/include -L/home/lfs/patches/usr/lib
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm
-lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl
-lglib-2.0
[gtk-theme-switch-2.0.0rc2]> ldd switch2 | grep gtk
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0
(0xb7cf0000)
[gtk-theme-switch-2.0.0rc2]> ./switch2 -p ~/theme/
~/theme//gtk-2.0/gtkrc:28: error: invalid identifier `light',
expected valid identifier

Jini ★★ ()

Re: Как указать альтернативу библиотеке из /usr/lib при сборке?

Дык блин, а LD_LIBRARY_PATH для кого придумали? Я понимаю, вечер, всем тяжко, но маны хотя бы по основным понятиям нужно изучить, ведь так? ;)

e ()

Re: Как указать альтернативу библиотеке из /usr/lib при сборке?

еще лучше gcc при линковке указать -Wl,rpath -Wl,/home/lfs/patches/usr/lib

Это вместо LD_LIBRARY_PATH; лучше потому что тот же libtool на него сильно смотрит, и все, что будешь собирать из исходников, будет завязано
на твою "домашнюю" gtk

L_user ()

Re: Как указать альтернативу библиотеке из /usr/lib при сборке?

Ага, так тоже сработало, только пришлось указать -Wl,-rpath -Wl,/home/lfs/patches/usr/lib, иначе ld ругался, что "rpath is not a directory". Спасибо за совет.

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