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

结合静态库

王磊
2023-03-14
问题内容

假设我有三个 C 静态库,它们说 libColor.a 取决于 libRGB。 a,而后者又取决于 libPixel.a 。据说库
libColor.a 依赖于库 libRGB.a, 因为 libColor.a中 有对 libRGB.a 中定义的某些符号的 引用
。如何将上述所有库合并到独立的新 libNewColor.a

独立意味着新库应已定义所有符号。因此,在链接时,我只需要给 -lNewColor即可 。新库的大小应尽可能小,即它不应在 libRGB.a中
包含 libColor.a 等未使用的任何符号。我在 ar 命令中使用了各种选项来运气(用于创建和更新静态库/档案) )。


问题答案:

1
/从每个库中提取所有目标文件(使用ar),并尝试在没有库或任何目标文件的情况下编译代码。您可能会得到未定义符号的绝对存储量。如果没有未定义的符号,请转到步骤5。

2 /抓住第一个,并使用找出哪个目标文件满足该符号nm

3 /写下该目标文件,然后编译您的代码,包括新的目标文件。您将获得一个新的未定义符号列表,或者如果没有,请转到步骤5。

4 /转到步骤2。

5 /将列表中的所有目标文件(如果有的话)合并到一个库中(再次使用ar)。

砰! 你有它。尝试不使用任何对象而是 使用 新库链接代码

使用shell脚本可以相对容易地使整个过程自动化。



 类似资料:
  • 问题内容: 我有一个项目,其中有一个静态库,另一个有我的实际共享库。我的目标是链接到。在Linux / BSD上可以吗?尝试创建测试程序时,出现以下错误: ./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号’‘ 我的猜测是,这是因为libhelper.a不是用while 编译的。使用共享库(也依赖于静态库)来构建程序的正确方法是什么? 谢谢! 问题答案:

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

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • 问题内容: 我正在看一些从Java字节码获得的反汇编代码。我看到一些声明如下: 我无法弄清楚什么或平均值。有人可以帮我理解这部分吗? 问题答案: 合成场,(2) 甲 编译器创建的 字段,该字段的本地内部类链接到一个块的局部变量或引用类型参数。 另请参见 或Java中的综合类。

  • 本文向大家介绍Java静态代理和动态代理总结,包括了Java静态代理和动态代理总结的使用技巧和注意事项,需要的朋友参考一下 静态代理 第一种实现(基于接口): 1》接口 2》目标类,至少实现一个接口 3》代理类(与目标类实现相同接口,从而保证功能一致) 3》测试 第二种实现(基于目标类): 1>目标类 2>代理类(通过继承目标类,保证功能一致) 3>测试 动态代理 动态代理的代理类是在程序运行期间

  • 静态库 一、Mach-O下静态库的类型 .a .o文件合集 程序代码的集合,是共享程序代码的一种方式 .framwork 苹果针对.a的一层包装 在Mac OS/iOS平台, Framework实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发. Framework 可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是 nib文件、国际化字