使用 ar cmd 在 C 中构建静态库

问题描述 投票:0回答:2

我是 C 编程新手,正在尝试学习如何构建静态库。我试图构建一个应用程序,建议我执行以下操作:

gcc -c testFile.c
ar a testFile.a testFile.o

当我尝试执行这些命令时,收到错误:“ar:未指定操作”

我熟悉 C 文件的简单构建,但是我不明白第二条命令行的作用以及为什么我们需要这样做?我了解 .o 文件,但为什么我们需要执行“ar a”?有没有更简单的方法来执行上述操作并避免错误?谢谢

c unix gcc compilation
2个回答
2
投票

根据[Man7]:AR(1) (

man ar
):

r        将文件 member... 插入 archive(带有 replacement)。

对于自定义,您可以使用其修饰符(也在上面URL中列出)。

示例:

(py_pc064_03.10_test2_pycoralcf) [cfati@cfati-5510-0:/mnt/e/Work/Dev/StackExchange/StackOverflow/q076052480]> ~/sopr.sh
### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###

[064bit prompt]> ls
[064bit prompt]> # Create an object file
[064bit prompt]> echo "void f() {}" | gcc -x c -c -o dummy.o -
[064bit prompt]> ls
dummy.o
[064bit prompt]> # Create (update) an archive out of it
[064bit prompt]> ar rs libdummy.a dummy.o
ar: creating libdummy.a
[064bit prompt]> ls -Al
total 8
-rw-r--r-- 1 cfati cfati 1352 Apr 19 12:08 dummy.o
-rw-r--r-- 1 cfati cfati 1490 Apr 19 12:10 libdummy.a
[064bit prompt]> # List archive members
[064bit prompt]> ar tv libdummy.a
rw-r--r-- 0/0   1352 Jan  1 02:00 1970 dummy.o

0
投票

tldr:使用

ar r your_static_lib.a *.o

c
用于创建,但当您使用 r
 时,
ar

仍会创建存档

s
用于创建索引,以便您可以检查库中的内容(这只不过是目标文件的
ar
chive),但现在默认情况下它是打开的

有时您会看到旗帜组合在

-
标志标记下,例如您可以使用
ls -atl
,但这是一个谎言。与常规标志不同,这些标志是位置性的,
ar create_me.a obj1.o obj2.o -r
不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.