我正在尝试使用'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
###
答案 0 :(得分:0)
如comment中所述......
当您使用-lname
时,链接器会在(已经)被告知搜索库的目录中查找libname.a
或libname.so
。
您可以将您的资源库重命名为libmine.a
,然后-L. -lmine
可以使用,或者将其重命名为libmylib.a
然后-lmylib
将有效(但重复lib
看起来有点笨拙,或者说是新手。)