2016-04-24 126 views
1

我已经静态库lib.a,并在所有使用教程:如何用静态库编译gcc?

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 

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

回答

1

gcc -l文档:

-l

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

...

使用-l选项并指定一个文件名之间的唯一区别在于,-l包围库“LIB”和“.A”和搜索几个目录。

因此,您不能将-l与名为'lib.a'的库一起使用。如果没有-l,请使用'lib.a'来包含它。当然,您不能使用-L然后设置要搜索此特定库的目录。

+0

但我使用-L no -l – Ice

+0

您正在使用:'-L'和'。'和'-l'与'ib',这使得'-L。 -lib'。 – MicroVirus

+0

gcc -o main main.o -L -liba,仍然不起作用。 – Ice

0

你有这条线的错误吗?

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

由于MicroVirus的文档中找到,你将不得不在liblib.a重命名库使用我的前行,或只是通过你的库gcc的是一个简单的文件。

+0

如果你的图书馆被称为llib.a,是的。 – Ice

+0

不,这个库应该被命名为lib.a,就像你的例子。带你的库名后面的-l参数表示gcc,你的库的名字是什么。 –

+0

我厌倦了运行你的命令,但我得到了同样的错误。 – Ice