【问题标题】:What's the difference between these two ar commands这两个ar命令有什么区别
【发布时间】:2017-10-19 08:52:09
【问题描述】:

两者有什么区别:

ar -x liba.a
ar -x libb.a
ar rcs libab.a *.o

ar rcs libab.a liba.a libb.a

他们真的在做同样的事情吗?

【问题讨论】:

  • 你的意思是两个“ar rcs”行之间的区别吗?如果是这样,您的意思是“.a”而不是“.o”吗?
  • 是的,这两个命令做同样的事情。不?使用 -x 提取和使用所有 .o 创建静态库或直接使用 .a 创建库有什么区别?
  • 不,他们做的事情并不完全相同。尝试“ar rcs libab1.a *.o”和“ar rcs libab2.a liba.a libb.a”,然后比较每个的内容(ar tv .a)。另见:stackoverflow.com/questions/3821916/…

标签: unix static-libraries unix-ar


【解决方案1】:

除非您使用我不知道的ar 版本,否则这两个命令序列的效果是完全不同的——尽管最终都创建了一个文件libab.a

第一个序列将liba.a中的所有(对象)文件提取到当前目录,然后是libb.a中的所有文件(任何名称冲突意味着libb.a中的文件将继续存在),然后是所有对象现在在目录中的文件(可能包括既不在liba.a 也不在libb.a 中的文件)归档在libab.a 中。

第二个序列创建一个包含两个文件的存档:liba.alibb.a。这是合法可行的,但生成的文件在链接程序时没有用。链接器不查看嵌套档案;它只会找到提供任何符号的目标文件(因为 liba.alibb.a 都不是目标文件),因此该库实际上将未被使用 - 尽管尝试使用它不会出错。

第一个命令序列比第二个命令序列更有可能有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2012-06-12
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多