2016-01-22 3 views
0

Я пытаюсь построить libxvidcore из источника используя tarball и отработку RPM specfile provided in RPMFusion. У меня есть причины переупаковывать это.Главная связанная общая библиотека символическая ссылка?

%global _hardened_build 1 
# can't seem to find debug info for now 
%global debug_package %{nil} 

%define package_name libxvidcore 
%define package_version 1.3.4 
%define package_release 1 

Name: %{package_name} 
Summary: A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible. 
Version: %{package_version} 
Release: %{package_release}%{?dist} 
License: GPL 
Source: http://downloads.xvid.org/downloads/xvidcore-%{package_version}.tar.bz2 

%ifarch %{ix86} x86_64 
BuildRequires: nasm 
%endif 

%description 
A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible. 

%prep 

%setup -n xvidcore 

%build 
cd build/generic 
%configure 

make %{?_smp_mflags} 

%install 
make -C build/generic install DESTDIR=$RPM_BUILD_ROOT 

%files 
%{_libdir}/libxvidcore.so.4 
%{_libdir}/libxvidcore.so.4.3 

%post -p /sbin/ldconfig 
%postun -p /sbin/ldconfig 

%package devel 
Summary: libxvidcore-devel 
Requires: libxvidcore = %{package_version} 
%description devel 
libxvidcore-devel 
%files devel 
%{_includedir}/xvid.h 
%{_libdir}/libxvidcore.so 
%exclude %{_libdir}/libxvidcore.a 

По-настоящему странные вещи происходят с общими библиотеками. Файлы, предоставленные libxvidcore являются:

/usr/lib64/libxvidcore.so.4 -> /usr/lib64/libxvidcore.so.4.3 
/usr/lib64/libxvidcore.so.4.3 

Пакет libxvidcore-devel зависит от libxvidcore. Тем не менее, я не могу установить libxvidcore-devel из-за следующую ошибку:

$ sudo rpm -ivh RPMS/x86_64/libxvidcore-1.3.4-1.fc23.x86_64.rpm \ 
       RPMS/x86_64/libxvidcore-devel-1.3.4-1.fc23.x86_64.rpm 
error: Failed dependencies: 
    libxvidcore.so.4()(64bit) is needed by libxvidcore-devel-1.3.4-1.fc23.x86_64 

Этой общая библиотекой (libxvidcore.so.4), как указано выше, является символической ссылкой libxvidcore.so.4.3, который является реальной ELF разделяемых библиотек. Поскольку я не определяю, как работает эта сборка, я не уверен, как обойти это.

Вот расположение пакетов:

$ rpm -qp --provides --fileprovide RPMS/x86_64/libxvidcore-1.3.4-1.fc23.x86_64.rpm 
libxvidcore = 1.3.4-1.fc23 
libxvidcore(x86-64) = 1.3.4-1.fc23 
/usr/lib64/libxvidcore.so.4 
/usr/lib64/libxvidcore.so.4.3 
$ rpm -qp --provides --fileprovide RPMS/x86_64/libxvidcore-devel-1.3.4-1.fc23.x86_64.rpm 
libxvidcore-devel = 1.3.4-1.fc23 
libxvidcore-devel(x86-64) = 1.3.4-1.fc23 
/usr/include/xvid.h 
/usr/lib64/libxvidcore.so 

Ради здравомыслие, вот это информация о разделяемой библиотеки как сообщает file:

$ file /usr/lib64/libxvidcore.so.4{,.3} 
/usr/lib64/libxvidcore.so.4: symbolic link to libxvidcore.so.4.3 
/usr/lib64/libxvidcore.so.4.3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=86c2c379f2ca0dc2f3d3f1306c55de29b1d76738, not stripped 

Вот еще информация о пакете libxvidcore:

$ rpm -qi --qf 'Arch : %{arch}\n' --provides libxvidcore 
Name  : libxvidcore 
Version  : 1.3.4 
Release  : 1.fc23 
Architecture: x86_64 
Install Date: Mon 25 Jan 2016 01:28:08 AM UTC 
Group  : Unspecified 
Size  : 2697952 
License  : GPL 
Signature : (none) 
Source RPM : libxvidcore-1.3.4-1.fc23.src.rpm 
Build Date : Mon 25 Jan 2016 01:27:50 AM UTC 
Build Host : fedora23 
Relocations : (not relocatable) 
Summary  : A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible. 
Description : 
A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible. 
Arch : x86_64 
libxvidcore = 1.3.4-1.fc23 
libxvidcore(x86-64) = 1.3.4-1.fc23 

Есть ли способ для меня иметь дело с нами ird symlink правильно?

+0

Является ли 'libxvidcore-devel-1.3.4-1.fc23.x86_64' ваш пакет? Является ли 'libxvidcore-devel-1.3.4-1.fc23.x86_64' уже установленным в вашей системе по какой-то причине? Что делает 'rpm -qp -provides $ your_vidcore_package' вывод? –

+0

@EtanReisner Я обновил вопрос с выводами из ваших команд. –

+0

Это не ваши пакеты. Это официальные пакеты Fedora 23, не так ли? Почему вы смотрите на них? Почему они установлены? Я думал, что все дело в том, чтобы создать свои собственные пакеты? Если это то, что вы хотите, вы не хотите, чтобы пакеты акций были установлены (хотя это может вызвать проблемы, поскольку ваши пакеты могут или не могут удовлетворять другим требованиям официальных пакетов). –

ответ

1

Проблема в том, что об/мин является «умным». Он только сканирует библиотеки с разрешениями на выполнение для библиотеки, которые предоставляются во время процесса rpmbuild.

По какой-то причине конструкция xvidcore нарушена (в этом отношении) и не устанавливает библиотеку с разрешениями на выполнение.

Fix, что (как я делал в быстром тесте с вызовом chmod в разделе %install но вы, вероятно, следует искать лучшее решение), и вы получите libxvidcore.so.4()(64bit) в --requires выходе, как и ожидалось.

Я не знаю, почему сборка не будет делать это сама по себе; Я думаю, это должно быть.

+0

Большое вам спасибо за помощь в отладке! –

-1

Это может помочь первым суммировать привычную организацию библиотечного пакета «базовый» и соответствующую библиотеку «base'-разви пакет:

file   package  function 
------------------------------------------------------------- 
libmy.so.x.y  my  actual implementation 
libmy.so.x  my  SONAME reference for dynamic linking 
          (relative symlink to mylib.so.x.y) 
libmy.so   my-devel linker library 
          (relative symlink to mylib.so.x) 
mylib.h   my-devel source header 

Поскольку библиотека линкер является символической ссылкой на библиотеку игнорирован, это естественное следствие того, что пакет base-devel требует пакет «base». Я думаю, что ваш пакет libxvidcore-devel ведет себя так, как ожидалось. Когда оба пакета находятся в репозитории Yum и запрашивается пакет «base'-devel», Yum будет решать требования и устанавливать оба.

Для работы в области развития, если вы используете «мин» команду непосредственно для установки пакетов, вам просто нужно указать, как в вашей команде установки:

rpm -i <base> <base>-devel 

Надеется, что это помогает.

+1

Что вы описали выше В этом случае я обновил свой вопрос. Я не могу установить пакет с 'rpm -ivh libxvidcore - *. rpm'. –

Смежные вопросы