2011-09-02 39 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

这应该是被接受的答案。 –