如何用静态库编译gcc?

时间:2016-04-24 12:19:57

标签: c linux static-libraries

我有静态库lib.a,并在所有教程中使用:

gcc -o main main.o -L. -lib

但我不能,我有错误:

    /usr/bin/ld: cannot find -lib
collect2: error: ld returned 1 exit status

我需要使用:

gcc -o main main.o -L. -lib.a

为什么呢?我该怎么做才能修复它?

2 个答案:

答案 0 :(得分:1)

来自gcc -l的文档:

  

-l <​​EM>文库:

     

链接器搜索库的标准目录列表,该库实际上是名为liblibrary.a 的文件。然后,链接器使用此文件,就好像它已按名称精确指定一样。

     

...

     

使用-l选项和指定文件名之间的唯一区别是-l使用'lib'和'.a'包围库并搜索多个目录。

因此,您无法将-l与名为&#39; lib.a&#39;的库一起使用。使用&#39; lib.a&#39;没有-l来包含它。当然,您无法使用-L来设置要搜索此特定库的目录。

答案 1 :(得分:0)

你有这条线的错误吗?

gcc -o main main.o -L. -llib

正如文档中的MicroVirus所示,您必须在liblib.a中重命名库以使用我之前的行,或者只是将您的库传递给gcc,就像一个简单的文件一样。