2011-09-02 37 views
12

我使用Ubuntu和gcc和g ++都工作正常,但今天,它表明:找不到-lc -lm和g ++中的Linux

cannot find -lm 
cannot find -lc 

我搜查,發現它是與/usr/bin/ld。這是符號鏈接(我希望)到lbd.bdf。我把這個文件粘貼在某些朋友pc的ubuntu目錄中。它沒有工作。我發現-lc表示包含靜態庫libc.a.
同樣爲-lm

我發現他們在我的i386-linux-folders(名稱是不同的)。

我試過代碼塊但是有相同的錯誤。

+1

你的G ++命令行是什麼? – KevinDTimm

+0

重新安裝開發包(例如aptitude刪除build-essential;重啓; aptitude install build-essential) – osgx

+0

@KevinDTimm g ++ -o output_fileName cpp_fileName –

回答

5

確保您LIBPATH(以g ++)指向目錄(IES),其libm.a和libc.a的位於(使用-L選項)

+0

如何查看我的g ++的當前libpath? – osgx

+0

@KevinDTimm我從來沒有這樣做過,它工作得很好......現在有什麼需要?總是做了g ++ -o output_fileName cpp_fileName。工作很好。 –

+0

您的LIBRARY_PATH被破壞(請參閱http://linux.die.net/man/1/gcc,搜索LIBRARY_PATH) – KevinDTimm

0

ld是GNU鏈接。

man ld ld結合了大量對象和歸檔文件,重新定位了它們的數據並綁定了符號引用。通常編譯程序的最後一步是運行ld。

它是用來鏈接你的程序與C庫和C數學庫。你需要確保libc6-dev安裝:

[email protected]: $ dpkg -s libc6-dev 

或多個通用,保證build-essential,這取決於必要的C型包件的屈指可數。

[email protected]: $ dpkg -s build-essential 
+0

注意OP沒有'ld'的概念。當你只談論'ld'時,你有責任向他解釋這些('g ++'和'ld')是如何相關的。 – KevinDTimm

+0

您的命令顯示狀態:安裝好安裝 –

+0

@KevinDTimm:相同的libpath,呃?那麼,我不知道OP有多少編程和* nix已經理解了,但是如果你得到一本關於C++的基礎書籍,它通常會跳過編譯背後的概念(基本上是預處理,編譯,鏈接)。我認爲如果你讀過這樣的書,那麼閱讀'ld是鏈接器',而不是已經有幫助。 –

21

編譯器不能找到靜態glibc的,你可能只安裝共享庫
嘗試

百勝安裝的glibc靜態

+1

這應該是被接受的答案。 –