gpt4 book ai didi

c - 如何将共享对象 (.so) 和静态库 (.a) 组合成一个新的共享对象?

转载 作者:太空狗 更新时间:2023-10-29 12:21:04 26 4
gpt4 key购买 nike

我有一个图书馆;将其命名为 libdog.so。我没有 libdog.so 的源代码。我没有进入 libdog.so.o 文件。

ldd libdog.so
libdogfood.so.1 => not found

libdog 依赖于 libdogfood。我有一个静态 dogfood 库,libdogfood.alibdogfood.la

我想创建一个新的库,libcompletedog.so,它没有对 libdogfood 的依赖。

我希望 libcompletedog 包含来自 libdogfood 的所有符号。

最佳答案

大多数 UNIX 系统(AIX 除外)将 .so 库视为链接的“最终”产品,不能将其重新链接到其他内容。

如果您的 libdogfood.a 是 32 位库,您可以将它链接到 libdogfood.so.1,从而满足缺少的依赖项:

gcc -shared -o libdogfood.so.1 \
-Wl,--whole-archive libdogfood.a -Wl,--no-whole-archive

如果 libdogfood.a 包含 64 位对象,上述可能仍然有效(如果对象是使用 -fPIC 编译的),但这有点不太可能。

关于c - 如何将共享对象 (.so) 和静态库 (.a) 组合成一个新的共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8365233/

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