gpt4 book ai didi

c++ - 依赖于同一个静态链接库的可执行文件和共享库

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

假设您正在开发一个共享库libshared.so

并且您有一个静态库 libstatic.a,其中包含您需要的一些内部类和功能。你想像这样将它链接到你的 .so:

g++ -o libshared.so -shared myObj.o -lstatic

还有一个 executable.sh 将使用您的 .so 并在运行时动态打开它

dlopen("libshared.so", RTLD_NOW)

您知道此可执行文件也静态链接到 libstatic.a(但您不确定库的版本是否与您的完全相同)。

那么问题是:

当您知道 executable.sh< 中已使用相同的库时,将您的 libshared.so 静态链接到 libstatic.a 是否安全且正确?/?

最佳答案

您应该避免将静态库链接到共享库。

因为共享库应该有 position independent code (否则,动态链接器必须做太多的重定位,你就失去了共享库的好处),但静态库通常没有 PIC。

阅读Drepper's paper: How to write a shared library

你建立你的图书馆

  g++ -Wall -O -fPIC mySrc.cc -c -o myObj.pic.o
g++ -o libshared.so -shared myObj.pic.o -lotherlib

关于c++ - 依赖于同一个静态链接库的可执行文件和共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133387/

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