Проблемы со сборкой пакета.

Пытаюсь собрать расширение для пхп для работы с expect.
Проблема при компиляции такая:


/bin/sh /home/vovochka/src/expect-0.2.9/expect-0.2.9/libtool --mode=link cc -DPHP_ATOM_INC -I/home/vovochka/src/expect-0.2.9/expect-0.2.9/include -I/home/vovochka/src/expect-0.2.9/expect-0.2.9/main -I/home/vovochka/src/expect-0.2.9/expect-0.2.9 -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -o expect.la -export-dynamic -avoid-version -prefer-pic -module -rpath /home/vovochka/src/expect-0.2.9/expect-0.2.9/modules  expect.lo expect_fopen_wrapper.lo -lexpect
cc -shared  .libs/expect.o .libs/expect_fopen_wrapper.o  -lexpect  -Wl,-soname -Wl,expect.so -o .libs/expect.so
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lexpect
collect2: ld returned 1 exit status
make: *** [expect.la] Ошибка 1


Проблема в том, что для сборки требуется expect.la, который успешно НЕ поставляется с expect-devel

Что делать? Как быть? Куда обращаться?

Добавить как зависимость в spec?

Проблема в том, что для сборки требуется expect.la

Откуда такая информация? Никогда *.la для компиляции не требовались.

Укажите путь линковщику:
LDFLAGS=-L/path/to/libexpect_dir

Добавить как зависимость в spec?

Мне бы для начала локально собрать :slight_smile:

Я не знаю что там требовалось, что нет. Но ошибка говорит об обратном.
Ваш так называемый /path/to/libexpect_dir = /usr/lib64
Там валяется libexpect.nn.nn.so
Но толку с того?

P.S.
Пытаюсь собрать пакет PECL :: Package :: expect

Но ошибка говорит об обратном.
Да где вы видите эту ошибку?
-o expect.la означает, что этот файл нужно создать.

Попробуйте сделать символьную ссылку с libexpect.nn.nn.so на libexpect.so в /usr/lib64.

Вот спасибо за науку чайнику. :slight_smile:
Ссылка помогла. Другое дело, что как мне помнится , такие ссылки обычно идут в devel пакетах.
Отсутствие таковой в expect-devel - бага или фича? И что вы посоветуете сделать в spec файле?

такие ссылки обычно идут в devel пакетах
Совершенно верно.

Отсутствие таковой в expect-devel - бага или фича?
На мой взгляд, это баг. У девелопера рассматривается как фича. Симлинк не создаётся при компиляции expect. Так что вины мейнтейнера пакета здесь нет.
Вот что написано в man libexpect:

cc files... -lexpect5.20 -ltcl7.5 -lm

Note: library versions may differ in the actual release.

Мне не совсем понятно это разделение на версии. Подразумевается, что можно поставить одновременно несколько пакетов expect. Но кому это надо?

Тут вижу два варианта:

  1. Просить мейнтейнера, чтобы он сделал символьную ссылку в пакете.
  2. Передавать линковщику флаг LIBS=-lexpect5.xx.xx.

Во втором случае надо делать определения для разных версий. Там как, вообще, компиляция осуществляется, через configure или готовый Makefile?


phpize
./configure
make

Перед ./configure надо выполнить

export LIBS=-lexpect5.44.1.11

Возможно, ещё что-то придётся добавить. Выложите на SUSE Paste Makefile, с которым вы сейчас компилируете. Посмотрим что там.

Я вижу, во всех текущих версиях oS используется expect-5.44.1.11, так что, проблем со спеком не будет.

при сборке пакета для 11.4 появляются вот такие варнингы:

vacuum-im.x86_64: W: unstripped-binary-or-object /usr/lib64/vacuum/plugins/libpepmanager.so
vacuum-im.x86_64: W: unstripped-binary-or-object /usr/lib64/vacuum/plugins/libconsole.so
vacuum-im.x86_64: W: unstripped-binary-or-object /usr/lib64/vacuum/plugins/libmessagearchiver.so

и т д 64 строки

vacuum-im.i586: W: unstripped-binary-or-object /usr/lib/vacuum/plugins/libsaslauth.so
vacuum-im.i586: W: unstripped-binary-or-object /usr/lib/vacuum/plugins/libchatstates.so
vacuum-im.i586: W: unstripped-binary-or-object /usr/lib/vacuum/plugins/libshortcutmanager.so

и тд 61 строка

разраберы говорят про пути к библиотекам.
строка сборки:
cmake … -DCMAKE_BUILD_TYPE=Release -DVER_STRING="%{rbuild}" -DINSTALL_SDK=1 -DCMAKE_INSTALL_PREFIX=%{_prefix} -DINSTALL_LIB_DIR=%{_lib}
не понимаю в чем может быть дело.

В настройках репозиториев нужно включить Debuginfo Flag enabled.

флаг включен по умолчанию

Да, действительно. Это какая-то хитрость с cmake.
Но это не критично, если не удасться победить.

EGDFree, вместо

-DCMAKE_BUILD_TYPE=Release

напиши

-DCMAKE_BUILD_TYPE=RelWithDebInfo