gpt4 book ai didi

linux - 混合静态库和共享库

转载 作者:IT王子 更新时间:2023-10-29 00:45:00 25 4
gpt4 key购买 nike

我有一个项目,其中有一个静态库 libhelper.a 和另一个与我的实际共享对象库 libteSTLib.so 的静态库。我的目标是将 libhelper.a 链接到 libteSTLib.so。这在 Linux/BSD 上可行吗?当我尝试创建一个测试程序时,出现了以下错误:

./prog1:/usr/local/lib/libtestlib.so.1.0: undefined symbol ''

我猜这是因为 libhelper.a 不是用 -fPIC 编译的,而 libteSTLib.so 是。构建使用同时依赖于静态库的共享库的程序的正确方法是什么?

谢谢!

最佳答案

My goal is to link libhelper.a into libtestlib.so. Is that possible on Linux?

当然。这应该做:

gcc -shared -fPIC -o libtestlib.so $(OBJS) \
-Wl,--whole-archive -lhelper -Wl,--no-whole-archive

libhelper.a was not compiled with -fPIC

最好用-fPIC 重建libhelper.a。如果那不可能,上面的命令仍然可以在 Linux/ix86 上运行,但不能在例如Linux/x86_64

What is the proper way to build programs that use shared libraries that also have dependancies on static libraries?

如果像上面那样将libhelper.a包含到libteSTLib.so中,那么很简单:

gcc main.c -ltestlib

就是你所需要的。如果您坚持要链接到 libhelper.a,那么您必须告诉最终用户他必须链接到例如

gcc main.c -ltestlib -lhelper

无法指定 libteSTLib.so 依赖于 libhelper.a

关于linux - 混合静态库和共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438891/

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