我是 C 编程新手,正在尝试学习如何构建静态库。我试图构建一个应用程序,建议我执行以下操作:
gcc -c testFile.c
ar a testFile.a testFile.o
当我尝试执行这些命令时,收到错误:“ar:未指定操作”
我熟悉 C 文件的简单构建,但是我不明白第二条命令行的作用以及为什么我们需要这样做?我了解 .o 文件,但为什么我们需要执行“ar a”?有没有更简单的方法来执行上述操作并避免错误?谢谢
根据[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
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
将不起作用。