可执行和共享库依赖于相同的静态链接库(An executable and a shared libr

2019-10-19 22:09发布

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

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

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

你也有一个executable.sh将使用你的.so ,动态地在运行时打开它

dlopen("libshared.so", RTLD_NOW)

你知道这个可执行文件以及静态对链接libstatic.a (但你不知道该库的版本是完全一样的你)。

所以,问题是:

它是安全和正确的静态链接你的libshared.solibstatic.a当你知道同一个库中已经使用executable.sh

Answer 1:

你应该避免静态库链接到一个共享的一个。

由于共享库应该有位置无关的代码 (否则,动态连接器需要做太多的搬迁,和你失去了共享库的好处),但静态库通常没有PIC。

阅读Drepper的论文:如何写共享库

你建立你的库

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


文章来源: An executable and a shared library dependent on a same statically linked library