如何 ar x filename.a 到不同的目录

how to ar x filename.a to different directory

是否有任何 ar 选项可以将对象提取到不同的目录? 有什么方法可以将它们提取到下面的 tmp 中?

[test]# ls -l
total 1828
-rw-r--r-- 1 root root 1859628 Aug 24 02:10 libclsr11.a
drwxr-xr-x 2 root root    4096 Aug 24 02:12 tmp
[test]# ar x libclsr11.a
[test]# ls -l
total 3760
-rw-r--r-- 1 root root  157304 Aug 24 02:13 clsrcact.o
-rw-r--r-- 1 root root   19304 Aug 24 02:13 clsrcclu.o
-rw-r--r-- 1 root root   55696 Aug 24 02:13 clsrccss.o
..
drwxr-xr-x 2 root root    4096 Aug 24 02:12 tmp
[test]#

解决方案取决于 ar 的版本。您可以使用 ar --version 在您的系统上显示 ar 的版本。

对于 ar / GNU binutils 2.34 之前的版本:

遗憾的是,ar 2.34 之前的版本没有提供指定解压缩文件目录的方法。 (至少我找不到。)它总是使用当前目录。但是,有一个简单的解决方法:在提取之前更改目标目录 并改用存档的相对路径:

# cd ./tmp/
# ar x ../libclsr11.a

这样你应该在 ./tmp/ 目录中得到 clsrcact.o、clsrcclu.o 和 clsrccss.o。

对于 ar / GNU binutils 2.34 或更高版本:

2.34 版的 binutils 为 ar 程序引入了 --output。 (参见the changelog。)可用于指定提取内容的目录:

# ar x --output tmp libclsr11.a

这样存档内容将进入 tmp 目录,而无需使用早期 ar 版本的解决方法。

其实是可以的,可能最近改了,--output选项就是你所需要的。

在你的例子中:

ar x libclsr11.a --output tmp