Прежде чем встараивать библиотеку в мою прогу, решил я собрать plplot'ские примеры. На моем ноуте живет Fedora x86_64, а програма, которую я разрабатываю собирается пока только под i386. Соответственно, и примеры мне нужно было собрать под i386.
Что установлено:
$ yum list plplot\*
Installed Packages
plplot.x86_64 5.9.5-1.fc12 @fedora
plplot-devel.i686 5.9.5-1.fc12 @fedora
plplot-libs.i686 5.9.5-1.fc12 @fedora
plplot-libs.x86_64 5.9.5-1.fc12 @fedora
plplot-qt.i686 5.9.5-1.fc12 @fedora
plplot-qt.x86_64 5.9.5-1.fc12 @fedora
plplot-qt-devel.i686 5.9.5-1.fc12 @fedora
plplot-tk.x86_64 5.9.5-1.fc12 @fedora
Для начала скопировал всю директорию с примерами из /usr/share/plplot5.9.5/examples/ к себе в домик.
$ make
cd c; make
make[1]: Entering directory `/home/neuron/study/development/plplot_examples/c'
/usr/bin/gcc x01c.c -o x01c `pkg-config --cflags --libs plplotd`
Package plplotd was not found in the pkg-config search path.
Perhaps you should add the directory containing `plplotd.pc'
to the PKG_CONFIG_PATH environment variable
No package 'plplotd' found
In file included from x01c.c:25:
plcdemos.h:14:22: error: plConfig.h: No such file or directory
plcdemos.h:15:20: error: plplot.h: No such file or directory
plcdemos.h:51:1: warning: "isnan" redefined
In file included from plcdemos.h:10,
from x01c.c:25:
/usr/include/math.h:257:1: warning: this is the location of the previous definition
x01c.c:26:21: error: plevent.h: No such file or directory
...
x01c.c:349: error: ‘y’ undeclared (first use in this function)
make[1]: *** [x01c] Error 1
make[1]: Leaving directory `/home/neuron/study/development/plplot_examples/c'
make: *** [c/x01c] Error 2
Локализуем ошибку.
$ pkg-config --cflags --libs plplotd
Package plplotd was not found in the pkg-config search path.
Perhaps you should add the directory containing `plplotd.pc'
to the PKG_CONFIG_PATH environment variable
No package 'plplotd' found
Ага. Информацию о пакете найти не может... Устанавливаем необходимую переменную окружения и идем дальше.
$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig
$ pkg-config --cflags --libs plplotd
-I/usr/include/plplot -lplplotd -lltdl -ldl -lm -lcsirocsa -lcsironn -lqhull -lqsastime -lfreetype
$ make
cd c; make
make[1]: Entering directory `/home/neuron/study/development/plplot_examples/c'
/usr/bin/gcc x01c.c -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.2/../../../libplplotd.so when searching for -lplplotd
/usr/bin/ld: skipping incompatible /usr/lib/libplplotd.so when searching for -lplplotd
/usr/bin/ld: cannot find -lplplotd
collect2: ld returned 1 exit status
make[1]: *** [x01c] Error 1
make[1]: Leaving directory `/home/neuron/study/development/plplot_examples/c'
make: *** [c/x01c] Error 2
Собираться пытаться начинает, devel-пакета не находит. Помните, что установлен только plplot-devel.i686? Поэтому идем в директорию 'c' и правим Makefile. В параметры сборки добавляем ключ -m32. Так как меня интересовали только примеры на C, то в этой директории я и остался. Собираемся дальше.
$ make
/usr/bin/gcc x01c.c -m32 -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/ld: skipping incompatible /usr/lib64/libltdl.so when searching for -lltdl
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [x01c] Error 1
Угадайте откуда косяк? Правильно. Собирраем мы теперь 32-битное приложение и зависимости ему нужны 32-битные...
$ rpm -qf /usr/lib64/libltdl.so
libtool-ltdl-devel-2.2.6-17.fc12.x86_64
$ sudo yum install libtool-ltdl-devel.i686
Далее таким же образом выяснилась необходимость qhull-devel.i686, freetype-devel.i686, gtk2-devel.i686, atk-devel.i686, glib2-devel.i686, pango-devel.i686, cairo-devel.i686 и fontconfig-devel.i686. И вуаля:
$ make
/usr/bin/gcc x01c.c -m32 -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/gcc x02c.c -m32 -o x02c `pkg-config --cflags --libs plplotd`
...
/usr/bin/gcc x31c.c -m32 -o x31c `pkg-config --cflags --libs plplotd`
/usr/bin/gcc x32c.c -m32 -o x32c `pkg-config --cflags --libs plplotd`
Результаты работы тестовых примером меня порадовали. Библиотека оказалась именно тем, что мне нужно. А благодаря легкому сексу при сборке примеров, я знаю чего стоит ожидать при сборке своей проги с этой библиотекой...
P.S. Не зря Bugzill'е есть репорт об ошибках при сборке примеров ;) Там, кстати, решили баг не фиксать кажется...
Комментариев нет:
Отправить комментарий