2017-03-14 4 views
1

J'ai une application qui en faisant:Application nécessitant libssl.so.10 => /usr/lib64/libssl.so.10 explicitement

export LD_LIBRARY_PATH=/this/is/another/folder 
ldd myApp 
// ... 
libssl.so.10 => /usr/lib64/libssl.so.10 
// ... 

Première question: Pourquoi les liens myApp explicitement sur libssl. So.10? quand dans le dossier OpenSSL je (ne devrait pas le lien avec libssl.so?):

/usr/lib64/libssl3.so 
/usr/lib64/libssl.so -> libssl.so.1.0.1e 
/usr/lib64/libssl.so.10 -> libssl.so.1.0.1e 
/usr/lib64/libssl.so.1.0.1e 

Deuxième question: pourquoi il se OpenSSL présent lib dans/usr/lib64 et non celui/cette/est/autre/dossier? Sur mon exec m'a donné (ceci indique clairement qu'il a essayé de charger libssl.so.10 dans mon dossier mais n'était pas là et il ne devrait pas être comme je m'attends à lier avec libssl. donc):

open("/this/is/another/folder/libssl.so.10", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/usr/lib64/libssl.so.10", O_RDONLY) = 3 

et l'elfe de mon exec est:

0x0000000000000001 (NEEDED)    Shared library: [libssl.so.10] 

MISE à JOUR principales sections de makefile :

SRC = myApp.cpp 
TARGET = myApp 
INCLUDE = -I/my/open/ssl/path/include 
LINK = -L/my/open/ssl/path/libs -lssl -lcrypto 

CFLAGS = -MMD -MP -c -std=c++0x 

all: $(TARGET) 

$(TARGET): $(SRC) 
     $(CXX) -o $(TARGET) $(SRC) $(LINK) 

Toute aide est appréciée!

Kasper

+0

Nous avons besoin de voir vos commandes de compilation et de liaison. Le système d'exploitation serait probablement utile car OS X établit toujours des liens vers une bibliothèque dynamique si elle est présente. Vous devez travailler très dur pour lier à une bibliothèque statique si un dylib est présent. – jww

Répondre

0

Parce que quand vous établissez un lien avec -lssl, regardez libss.so l'éditeur de liens (ld), et émet une étiquette DT_NEEDED dans la section .dynamic du fichier de sortie à tout ce fichier se déclare être.

Cette déclaration vient de la balise DT_SONAME de la section .dynamic de libssl.so (qui est généralement un lien symbolique), et il rend compte libssl.so.10.

Le chargeur dynamique (ld.so) sera alors lecture balise DT_NEEDED et rechercher un fichier nommé libsso.so.10.

J'ai effectivement wrote about this il y a quelques années, donc vous pouvez chercher l'explication de forme longue.