如何在 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.a
或 libname.so
。
您可以将您的库重命名为 libmine.a
然后 -L. -lmine
将起作用,或者将它重命名为 libmylib.a
然后 -lmylib
将起作用(但是重复的 lib
看起来有点笨拙,或者新手)。
我正在尝试使用通过 '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.a
或 libname.so
。
您可以将您的库重命名为 libmine.a
然后 -L. -lmine
将起作用,或者将它重命名为 libmylib.a
然后 -lmylib
将起作用(但是重复的 lib
看起来有点笨拙,或者新手)。