2016-04-24 134 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