Linux 需要libssl.so.10的应用程序=>/usr/lib64/libssl.so.10
我有一个应用程序,通过执行以下操作:Linux 需要libssl.so.10的应用程序=>/usr/lib64/libssl.so.10,linux,openssl,ld,strace,ldd,Linux,Openssl,Ld,Strace,Ldd,我有一个应用程序,通过执行以下操作: export LD_LIBRARY_PATH=/this/is/another/folder ldd myApp // ... libssl.so.10 => /usr/lib64/libssl.so.10 // ... 首先问题:为什么myApp在libssl.so.10上显式链接?当我在openssl文件夹中时(不应该链接到libssl.so?): 第二个问题:为什么它在/usr/lib64中获得openssl库,而不是在/this/is/oth
export LD_LIBRARY_PATH=/this/is/another/folder
ldd myApp
// ...
libssl.so.10 => /usr/lib64/libssl.so.10
// ...
首先问题:为什么myApp在libssl.so.10上显式链接?当我在openssl文件夹中时(不应该链接到libssl.so?):
第二个问题:为什么它在/usr/lib64中获得openssl库,而不是在/this/is/other/文件夹中
两个信息:strace在我的exec上给了我(这清楚地表明它试图将libssl.so.10加载到我的文件夹中,但不在那里,并且不应该像我期望的那样链接到libssl.so):
我的执行官的精灵是:
0x0000000000000001 (NEEDED) Shared library: [libssl.so.10]
更新
主要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)
感谢您的帮助
Kasper因为当您使用-lssl链接时,链接编辑器(
ld
)会查找libss.so
,并在输出文件的.dynamic
部分向该文件声明其自身为的任何对象发出所需的dtu
标记
该声明来自libssl.so
(通常是一个符号链接)的DT\u SONAME
标记,它报告libssl.so.10
然后,动态加载程序(ld.so
)将读取dtu-NEEDED
标记,并查找名为libsso.so.10
的文件
实际上,我几年前就这样做了,所以您可以查找长格式的解释。因为当您使用-lssl链接时,链接编辑器(
ld
)会查找libss.so
,并在输出文件的.dynamic
部分向该文件声明的内容发出dtu所需的
标记
该声明来自libssl.so
(通常是一个符号链接)的DT\u SONAME
标记,它报告libssl.so.10
然后,动态加载程序(ld.so
)将读取dtu-NEEDED
标记,并查找名为libsso.so.10
的文件
事实上,我在几年前就知道了,因此您可以查看详细的表单解释。我们需要查看您的编译和链接命令。OS可能会有所帮助,因为OSX总是链接到动态库(如果有)。如果存在动态库,您必须格外努力才能链接到静态库。我们需要查看您的编译和链接命令。OS可能会有所帮助,因为OSX总是链接到动态库(如果有)。如果存在动态库,则必须格外努力才能链接到静态库。
0x0000000000000001 (NEEDED) Shared library: [libssl.so.10]
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)