LINUX.ORG.RU
ФорумAdmin

ocilib - Необходимо: libclntsh.so.12.1()(64bit)

 


0

1

Всем привет.
Помогите плиз
Собрал ocilib в rpm пакет при установке пакета выдает

Ошибка: Пакет: ocilib-4.5.1-src.x86_64 (/ocilib-4.5.1-src.x86_64)
            Необходимо: libclntsh.so.12.1()(64bit)
что имеется:
ldconfig -p | grep libclntsh.so*
	libclntsh.so.12.1 (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1
	libclntsh.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntsh.so

echo $LD_LIBRARY_PATH
/opt/rh/devtoolset-7/root/usr/lib64:/opt/rh/devtoolset-7/root/usr/lib:/usr/lib/oracle/12.2/client64/lib/

по ораклу:
export ORACLE_BASE=/usr/lib/oracle/12.2/client64
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export NLS_LENGTH_SEMANTICS=CHAR
export NLS_NUMERIC_CHARACTERS=".,"
export TNS_ADMIN=/etc
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export SQLPATH=$ORACLE_HOME/bin/sqlplus
export ORACLE_TERM=xterm
export TMP=/tmp
export TMPDIR=$TMP
export PATH=$PATH:$ORACLE_HOME/bin

при этом собрался пакет без каких либо ошибок.
где я косячу? уже всё перепробовал. не находит эту либу.

ldd libocilib.so
libclntsh.so.12.1 => /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1 (0x00007ffb804ed000)

ls -la /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1
-rwxr-xr-x. 1 root root 71638263 янв 26  2017 /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1


пакетов rpm не собирал

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

libclntsh.so.12.1 => /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1

Я вижу два «костыля»

  • сделать линк на libclntsh.so.12.1 в /usr/lib/ и повторить установку (он же не встал?)
  • изменить
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
    на
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/liboracle/12.2/client64/lib/
    и пересобрать пакет ocilib
anymouze ★★ ()

установил версию

oracle-instantclient18.3
ldconfig -p | grep libclntsh.so.18.1
	libclntsh.so.18.1 (libc6,x86-64) => /usr/lib/oracle/18.3/client64/lib/libclntsh.so.18.1

rpm -q --whatprovides libclntsh.so.18.1
oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64


сделал:
sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > \
      /etc/ld.so.conf.d/oracle-instantclient.conf"
  sudo ldconfig

export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
собираю пакет spec прилагаю

..............

%prep
%setup -q
./reconf


%build
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
./configure --with-oracle-headers-path=/usr/include/oracle/18.3/client64 --with-oracle-lib-path=/usr/lib/oracle/18.3/client64/lib
make




%install
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
make install DESTDIR=%{buildroot}
%check
make check


%files
/usr/local/lib

%files devel
/usr/local/include
/usr/local/share

собирается всё отлично

но при установке rpm пакета

yum install ocilib-4.5.1-1.el7.centos.x86_64.rpm  ocilib-devel-4.5.1-1.el7.centos.x86_64.rpm 
Загружены модули: fastestmirror
Проверка ocilib-4.5.1-1.el7.centos.x86_64.rpm: ocilib-4.5.1-1.el7.centos.x86_64
ocilib-4.5.1-1.el7.centos.x86_64.rpm отмечен для установки
Проверка ocilib-devel-4.5.1-1.el7.centos.x86_64.rpm: ocilib-devel-4.5.1-1.el7.centos.x86_64
ocilib-devel-4.5.1-1.el7.centos.x86_64.rpm отмечен для установки
Разрешение зависимостей
--> Проверка сценария
---> Пакет ocilib.x86_64 0:4.5.1-1.el7.centos помечен для установки
--> Обработка зависимостей: libclntsh.so.18.1()(64bit) пакета: ocilib-4.5.1-1.el7.centos.x86_64
Loading mirror speeds from cached hostfile
 * base: mirror.reconn.ru
 * epel: mirror.yandex.ru
 * extras: mirror.yandex.ru
 * nux-dextop: mirror.li.nux.ro
 * updates: mirror.reconn.ru
---> Пакет ocilib-devel.x86_64 0:4.5.1-1.el7.centos помечен для установки
--> Проверка зависимостей окончена
Ошибка: Пакет: ocilib-4.5.1-1.el7.centos.x86_64 (/ocilib-4.5.1-1.el7.centos.x86_64)
            Необходимо: libclntsh.so.18.1()(64bit)
 Вы можете попробовать --skip-broken чтобы обойти проблему
 Вы можете попробовать запустить: rpm -Va --nofiles --nodigest


вообщем не знаю уже куда копать.

carter ()
Последнее исправление: carter (всего исправлений: 4)
Ответ на: комментарий от carter

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

вообщем не знаю уже куда копать

необходимо при установке

Необходимо: libclntsh.so.18.1()(64bit)

В системе

ldconfig -p | grep libclntsh.so*

libclntsh.so.12.1 (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1

libclntsh.so.18.1()(64bit) vs libclntsh.so.12.1 (libc6,x86-64)

Где и как указывается эта зависимость?

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

я вижу 2 варианта

  • при установке пакета эта библиотека ищется не там, где она есть — но вроде пути ему указали верные
  • библиотеку он «не признаёт», как ту что необходима для ocilib

Ведь где-то в исходниках пакета указано, что пакету для работы нужна libclntsh.so.18.1()(64bit). А в системе установлена libclntsh.so (libc6,x86-64). Я-то понимаю, что это она и есть. Пакетный менеджер — нет.

Видимо придется попросить у Вас исходники пакета. Или сами поищите в них упоминания libclntsh.so

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

https://github.com/vrogier/ocilib/releases/ вот исходники, я там ничего толком для себя не нашел, что мне могло бы помочь.

и спек файл

Name:           ocilib
Version:        4.5.1
Release:        1%{?dist}
Summary:        asdasd

Group:          BSD
License:        BSD
URL:            https://github.com/vrogier/ocilib/releases/
Source0:        https://github.com/vrogier/ocilib/releases/ocilib-%{version}.tar.gz

#BuildRequires: boost
#Requires:      
%define debug_package %{nil}

%description
ocilib

%package devel
Summary: libs
Requires: %{name} = %{version}-%{release}

%description devel
This package contains libs

%prep
%setup -q
./reconf


%build
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
./configure --with-oracle-headers-path=/usr/include/oracle/18.3/client64 --with-oracle-lib-path=/usr/lib/oracle/18.3/client64/lib
make




%install
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
make install DESTDIR=%{buildroot}
%check
make check


%files
/usr/local/lib

%files devel
/usr/local/include
/usr/local/share

carter ()
Последнее исправление: carter (всего исправлений: 1)
Ответ на: комментарий от carter

попытка №...

Приведу цитату из статьи

Requires — в эту секцию записываются пакеты или файлы(!), которые будет требовать данный пакет при установке. При сборке в зависимости автоматически пропишутся все библиотеки, которые наш пакет потребует, но вы также можете указать пакеты вручную.

У Вас там пусто. Укажите там библиотеку libclntsh.so.12.1. Вот:

Name:           ocilib
Version:        4.5.1
Release:        1%{?dist}
Summary:        asdasd

Group:          BSD
License:        BSD
URL:            https://github.com/vrogier/ocilib/releases/
Source0:        https://github.com/vrogier/ocilib/releases/ocilib-%{version}.tar.gz

#BuildRequires: boost
#Requires: libclntsh.so.12.1     
%define debug_package %{nil}

%description
ocilib

%package devel
Summary: libs
Requires: %{name} = %{version}-%{release}

%description devel
This package contains libs

%prep
%setup -q
./reconf


%build
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
./configure --with-oracle-headers-path=/usr/include/oracle/18.3/client64 --with-oracle-lib-path=/usr/lib/oracle/18.3/client64/lib
make




%install
#export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
make install DESTDIR=%{buildroot}
%check
make check


%files
/usr/local/lib

%files devel
/usr/local/include
/usr/local/share

Пересобирите пакет, установите (надеюсь всё дело было в этой формальностимелочи)

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

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

anonymous ()