gpt4 book ai didi

linux - 明确要求 libssl.so.10 =>/usr/lib64/libssl.so.10 的应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:06 29 4
gpt4 key购买 nike

我有一个应用程序:

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/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

第二个问题:为什么它得到的是/usr/lib64 中的 openssl 库,而不是/this/is/another/folder 中的 openssl 库?

两个信息:strace 在我的 exec 上给了我(这清楚地表明它试图在我的文件夹中加载 libssl.so.10 但不在那里而且它不应该像我期望的那样链接到 libssl.so):

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

我的执行官的小 Sprite 是:

 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)

感谢任何帮助!

卡斯帕

最佳答案

因为当您使用 -lssl 链接时,链接编辑器 (ld) 查找 libss.so,并发出一个 输出文件的 .dynamic 部分中的 DT_NEEDED 标记为该文件声明的内容。

该声明来自 libssl.so.dynamic 部分的 DT_SONAME 标记(通常是符号链接(symbolic link)),它报告 libssl.so.10

动态加载程序 (ld.so) 然后将读取DT_NEEDED 标记并查找名为libsso.so 的文件。 10

我其实wrote about this几年前,所以您可以查看长篇解释。

关于linux - 明确要求 libssl.so.10 =>/usr/lib64/libssl.so.10 的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42797933/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com