Создавая ссылку на разделяемую библиотеку

Программа может вести себя по-разному в зависимости от того, каким именем она была названа.

Примером является bash , который перейдет в режим POSIX , если будет вызван как sh :

$ bash -c 'set() { echo 1; }; set'
1

, а:

$ ARGV0=sh bash -c 'set() { echo 1; }; set'
sh: `set': is a special builtin

( zsh используйте переменную ARGV0 для передачи argv [0] )

0
13.07.2018, 19:55
2 ответа

RPM всегда разделены на проблемные области. Обычно их называют:

<pkg>.<arch>
<pkg>-devel.<arch>
<pkg>-libs.<arch>

Где <pkg>будет openssl, а <arch>будет i686или x86_64. Существуют и другие архитектуры, но эти наиболее распространены на оборудовании AMD/Intel, поэтому в данном обсуждении мы остановимся только на них.

Фактические инструменты, составляющие opensslпрограммное обеспечение, включены в RPM openssl.x86_64. Обратите внимание, как имя этого RPM соответствует шаблонам, которые я показал выше?

Библиотеки (.so )находятся в этом RPM, openssl-libs.x86_64, а заголовочные файлы (.h )находятся в этом RPM, openssl-devel.x86_64.

Итак, ваша проблема в том, что вы на самом деле не установили библиотеку или заголовочные файлы, чтобы ваш пакет мог скомпилироваться и связать с пакетом openssl.

Попробуйте это:

$ yum search openssl | grep ^openssl
openssl-devel.i686 : Files for development of applications which will use
openssl-devel.x86_64 : Files for development of applications which will use
openssl-perl.x86_64 : Perl scripts provided with OpenSSL
openssl-pkcs11.x86_64 : A PKCS#11 engine for use with OpenSSL
openssl-static.i686 : Libraries for static linking of applications which will
openssl-static.x86_64 : Libraries for static linking of applications which will
openssl.x86_64 : Utilities from the general purpose cryptography library with
openssl-libs.x86_64 : A general purpose cryptography library with TLS
openssl-libs.i686 : A general purpose cryptography library with TLS
openssl098e.i686 : A compatibility version of a general cryptography and TLS
openssl098e.x86_64 : A compatibility version of a general cryptography and TLS

Теперь их нужно установить:

$ sudo yum install -y openssl-{devel,libs}

После установки вы можете проверить содержимое openssl-libsRPM:

$ rpm -ql openssl-libs | grep libssl.so
/usr/lib64/.libssl.so.1.0.2k.hmac
/usr/lib64/.libssl.so.10.hmac
/usr/lib64/libssl.so.1.0.2k
/usr/lib64/libssl.so.10

Что делать, если я не знаю, какой RPM установить?

Это общий вопрос, который я вижу постоянно. Большинство людей, которые плохо знакомы с дистрибутивами Redhat, такими как Fedora/CentOS/RHEL, не знают об инструменте командной строки repoquery. С помощью этого инструмента вы можете запрашивать удаленные репозитории YUM и искать, какие пакеты предоставляют данный файл.

Итак, в вашем сценарии:

$ repoquery -qf */libssl.so*
openssl-libs-1:1.0.2k-12.el7.x86_64
openssl-devel-1:1.0.2k-12.el7.x86_64
openssl098e-0:0.9.8e-29.el7.centos.3.i686
openssl-libs-1:1.0.2k-12.el7.i686
openssl-devel-1:1.0.2k-12.el7.i686

Мы видим, что файл libssl.so*включен во все вышеуказанные пакеты RPM. Таким образом, исходя из вашего существующего RPM, вам, вероятно, понадобятся эти 2:

openssl-libs-1:1.0.2k-12.el7.x86_64
openssl-devel-1:1.0.2k-12.el7.x86_64

ПРИМЕЧАНИЕ.:Имейте в виду, что я показываю вам пакеты CentOS 7.x, вы используете Amazon AMI, который является их собственным фирменным пакетом CentOS, поэтому названия немного отличаются, но процесс, который я показано, что вы должны быть идентичны, независимо от того.

1
28.01.2020, 04:18

Оказалось, что у меня была библиотека libssl в /usr/lib64, только с именем файла, отличным от ожидаемого ZendDebugger (libssl.so.1.0.0 ). Поэтому я только что создал на него жесткую ссылку с правильным именем файла:

[ec2-user@ip-172-31-4-60 ~] cd /usr/lib64
[ec2-user@ip-172-31-4-60 lib64] ls -la libssl*
-rwxr-xr-x 1 root root 303520 Jun 22  2017 libssl3.so
lrwxrwxrwx 1 root root     16 Sep 20  2017 libssl.so -> libssl.so.1.0.1k
lrwxrwxrwx 1 root root     16 Aug 13  2017 libssl.so.10 -> libssl.so.1.0.1k
-rwxr-xr-x 2 root root 449616 Feb 28  2017 libssl.so.1.0.1k
[ec2-user@ip-172-31-4-60 lib64] sudo ln libssl.so.1.0.1k libssl.so.1.0.0

и теперь это работает!

0
28.01.2020, 04:18

Теги

Похожие вопросы