如何构建我的共享库 (.so),以便包含来自不同共享库的符号?

如何构建我的共享库 (.so),以便包含来自不同共享库的符号?

我的共享库libnew.so使用了已构建的第三方共享库中的一些符号libold.so。我想构建一个可执行的二进制文件,该文件只能链接到libnew.so.但它仍然需要链接到libold.so也。否则,链接器会抱怨undefined reference to symbol....

我使用这些命令来构建libnew.so可执行文件。由于某种原因,只允许使用当前目录,而我不能将文件放在其他地方。

顺便说一句,显示未定义的nm libnew.so符号。也不报告任何。如果我不用于构建,则大小不会改变!libold.soldd libnew.solibold.solibold.solibnew.solibnew.so

对于 libnew.so :

gcc -Wall -fPIC -c libnew.c
gcc -shared -Wl,-soname,libnew.so.1 -o libnew.so.1.0 *.o -L. -lold
ln -sf libnew.so.1.0 libnew.so.1
ln -sf libnew.so.1.0 libnew.so

对于可执行文件:

#this does not work and needs -lold as well.
gcc -Wall main.c -L. -lnew -o prog

有什么遗漏吗?谢谢!

答案1

缺少的是你的链接器命令

gcc -shared -Wl,-soname,libnew.so.1 -o libnew.so.1.0 *.o -L. -lold

才不是复制来自 的对象libold.so,但是指的是该文件中的符号告诉动态加载器在哪里可以获取这些符号。

通常,当有人试图抑制/隐藏给定的库时,他们首先重新组合用于创建共享库的对象文件。你可能能够通过以下方式完成此任务部分链接,但我没有看到解决方案(因为共享库和共享对象不可互换)。

进一步阅读:

相关内容