当前位置: 首页 > 面试题库 >

混合静态库和共享库

糜淇
2023-03-14
问题内容

我有一个项目,其中有一个静态库libhelper.a,另一个有我的实际共享库libtestlib.so。我的目标是链接libhelper.alibtestlib.so。在Linux
/ BSD上可以吗?尝试创建测试程序时,出现以下错误:

./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号’‘

我的猜测是,这是因为libhelper.a不是用-fPICwhile
编译的libtestlib.so。使用共享库(也依赖于静态库)来构建程序的正确方法是什么?

谢谢!


问题答案:

我的目标是将libhelper.a链接到libtestlib.so。在Linux上有可能吗?

当然。应该这样做:

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

libhelper.a未使用-fPIC编译

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

使用共享库(也依赖于静态库)来构建程序的正确方法是什么?

如果包括libhelper.alibtestlib.so如上,那么简单:

gcc main.c -ltestlib

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

gcc main.c -ltestlib -lhelper

无法指定libtestlib.so取决于libhelper.a



 类似资料:
  • 本文向大家介绍静态库和共享库之间的区别,包括了静态库和共享库之间的区别的使用技巧和注意事项,需要的朋友参考一下 在编程上下文库中是一种具有某种代码的东西,这些代码已经过预编译,可以在任何程序中重新使用以实现某些特定功能或特性。 现在,根据该代码库的执行和存储,将其分为两种类型,即静态库和共享库。 以下是静态库和共享库之间的重要区别。 序号 要点 静态库 共享库 1 定义 静态库是一个库,其中执行文

  • 问题内容: 我有一个第三方库,主要由大量的静态()库文件组成。我可以将其编译为单个库文件,但我确实需要将其作为单个共享库文件。 有什么方法可以将静态文件转换为共享文件?或更笼统地说,是否有一种将大量静态文件和一些目标文件合并为一个文件的好方法? 问题答案: 是否这样做(当然带有适当的-L) 不是吗

  • 问题内容: 我参与了有关Linux库的一些辩论,并想确认一些事情。 以我的理解(如果我做错了请纠正我,稍后我将编辑我的文章)在构建应用程序时有两种使用库的方式: 静态库(.a文件):在链接时,会将整个库的副本放入最终应用程序中,以便调用方应用程序始终可以使用库中的功能 共享对象(.so文件):在链接时,仅通过相应的标头(.h)文件针对其API验证了对象。该库直到需要运行时才真正使用。 静态库的明显

  • 问题内容: 如何在gcc中静态链接共享库函数? 问题答案: 参考: http://www.linuxquestions.org/questions/linux-newbie-8/forcing-static- linking-of-shared- libraries-696714/ http://linux.derkeiler.com/Newsgroups/comp.os.linux.develo

  • 问题内容: 假设我有三个 C 静态库,它们说 libColor.a 取决于 libRGB。 a,而后者又取决于 libPixel.a 。据说库 libColor.a 依赖于库 libRGB.a, 因为 libColor.a中 有对 libRGB.a 中定义的某些符号的 引用 。如何将上述所有库合并到独立的新 libNewColor.a ? 独立意味着新库应已定义所有符号。因此,在链接时,我只需要给

  • .a静态库合并 静态库是.o文件的合集, 静态库合并就是将静态库的.o合并, 可以实现的工具 ar, 静态库的查看、拆分、合并 libtool, xcode提供的静态库操作工具 以libtool演示.a静态库合并 一、准备 在staticLib文件夹里准备好两个.a静态库 目录结构 . ├── libAFNetworking.a └── libSDWebImage.a 二、合并 执行命令