如何在 linux 下使用 gcc 静态库

How to use static library with gcc under linux

我正在尝试使用通过 'ar' 创建的静态库 'mylib.a'。我看到的示例使用 -L 和 -l 来命名库。我尝试使用这些失败了。但是,如果我只是将库文件名放在链接器命令上,它就可以工作。 (我忽略了一些明显的东西?)使用 gcc 4.8.4 Ubuntu 14.04(请参阅代码中的注释。)f?.c 和 mymain.c 非常简单。谢谢!

#!/bin/bash

# cc -v    shows...
#  gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 

cc -c -Wall -Wstrict-prototypes -o fa.o fa.c
cc -c -Wall -Wstrict-prototypes -o fb.o fb.c
cc -c -Wall -Wstrict-prototypes -o fc.o fc.c
cc -c -Wall -Wstrict-prototypes -o mymain.o mymain.c

ar -rcs mylib.a  fa.o fb.o fc.o

# THIS WORKS
#cc -o mypgm mymain.o mylib.a

# THESE FAIL WITH ERROR '/usr/bin/ld: cannot find -lmylib'
cc -o mypgm mymain.o -L. -lmylib
# OR 
cc -o mypgm mymain.o -static -L. -lmylib

###

中所述

当您使用 -lname 时,链接器会在(已经)被告知要搜索库的目录之一中查找 libname.alibname.so

您可以将您的库重命名为 libmine.a 然后 -L. -lmine 将起作用,或者将它重命名为 libmylib.a 然后 -lmylib 将起作用(但是重复的 lib 看起来有点笨拙,或者新手)。