gpt4 book ai didi

c++ - 如何避免可执行文件关心其依赖项的依赖关系?

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

设是一个可执行文件 C.exe 取决于 libB.so 本身取决于 libA.soC.exe 不直接使用 libA。工具 ldd 显示 C.exe 仍然需要 libA.so :

> ldd C.exe 
libB.so => ./libB.so (0x00002b11cc4f5000)
libA.so.1 => ./libA.so.1 (0x00002b11cc719000)
<snip>

我原以为 libA.so 只会在检查 libB.so 时出现。有没有办法避免这种行为或者你认为它是正确的?

我的问题是 libA 可以更新到版本 2,因此库名称将更改为 libA.so.2。我重新编译了 libB 而不是 C.exe。我期待 C.exe 运行良好,因为它取决于 libB,它知道选择哪个 libA,但事实并非如此。

如何处理这种情况?

编译和链接细节

libA.so 是这样编译和链接的:

g++ -fPIC -Wall -shared -Wl,-soname,libA.so.1 libA.cpp -o libA.so.1
ln -s libA.so.1 libA.so

libB.so 是这样编译和链接的:

g++ -fPIC -Wall -shared -L. -lA libB.cpp -o libB.so

C.exe 是这样编译和链接的:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
g++ -fPIC -Wall -L. -lB exeC.cpp -o C.exe

最佳答案

您必须将 libA 创建为静态库(使用 ar)。这样它的代码将嵌入到 libB.so 中,您将不会有额外的依赖项。

关于c++ - 如何避免可执行文件关心其依赖项的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413714/

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