在 g++ linux 中找不到 -lc 和 -lm

Posted

技术标签:

【中文标题】在 g++ linux 中找不到 -lc 和 -lm【英文标题】:Cannot find -lc and -lm in g++ linux 【发布时间】:2011-11-09 04:27:34 【问题描述】:

我使用的是 ubuntu,gcc 和 g++ 工作正常,但今天显示:

cannot find -lm
cannot find -lc

我搜了一下,发现跟/usr/bin/ld有点关系。这是lbd.bdf 的符号链接(我希望)。我将该文件粘贴到一些朋友 pc 的 ubuntu 的目录中。没用。

我发现-lc 表示包含静态库 libc.a。-lm 也类似

我在我的i386-linux-folders 中找到了它们(名称有所不同)。

我尝试了代码块,但同样的错误。

【问题讨论】:

你的 g++ 命令行是什么? 重新安装开发包(例如 aptitude remove build-essential; reboot; aptitude install build-essential) @KevinDTimm g++ -o output_fileName cpp_fileName 【参考方案1】:

编译器找不到静态 glibc,您可能只安装了共享库 试试 yum install glibc-static

【讨论】:

【参考方案2】:

确保您的 libpath(在 g++ 中)指向 libm.a 和 libc.a 所在的目录(使用 -L 选项)

【讨论】:

如何查看我的 g++ 的当前 libpath? @KevinDTimm 我以前从未这样做过,而且效果很好......现在需要什么?总是做 g++ -o output_fileName cpp_fileName。工作正常。 您的 LIBRARY_PATH 已损坏(请参阅 linux.die.net/man/1/gcc,搜索 LIBRARY_PATH) 如果 liba 和 libm 不在默认位置,则存在更大的问题。设置 -L 不太可能有帮助。 如果我听起来像那样,我很抱歉.. 但我认为您对 LIBRARY_PATH 的看法是正确的。 echo $LIBRARY_PATH 什么也没显示。 libc.a 位于 /usr/lib/i386-linux-gnu/libc.a /usr/lib/i386-linux-gnu/xen/libc.a 和 libm.a 位于 /usr/lib/i386-linux -gnu/libm.a /usr/lib/i386-linux-gnu/xen/libm.a【参考方案3】:

ld 是 GNU 链接器。

man ld ld 组合了许多对象和归档文件,重新定位它们的数据并绑定符号引用。通常编译程序的最后一步是运行 ld。

它用于将您的程序与 C 库和 C 数学库链接。您需要确保已安装libc6-dev

foo@bar: $ dpkg -s libc6-dev

或者更通用,确保build-essential,它依赖于少数必要的 C 包。

foo@bar: $ dpkg -s build-essential

【讨论】:

请注意,OP 没有ld 的概念。当您只谈论ld 时,您有责任向他解释这些(g++ld)之间的关系。 @KevinDTimm:libpath 也一样,是吗?好吧,我不知道 OP 已经了解了多少编程和 *nix,但是如果你有一本关于 C++ 的基本书籍,它通常会解释编译背后的概念(基本上是预处理、编译、链接)。我想如果你读过这样的书,然后读ld is the linker,就会有所帮助。

以上是关于在 g++ linux 中找不到 -lc 和 -lm的主要内容,如果未能解决你的问题,请参考以下文章

在Ubuntu上的PATH中找不到程序“g ++”

Eclipse neon C 程序没有构建 g++ 并且在路径错误中找不到 gcc

在路径中找不到 Eclipse g++:windows

在 PATH 中找不到“g++”[已安装 mac/Eclipse/XCODE/CDT]

在 Ubuntu 中找不到 X11/Xlib.h

“exec:”go “:$ PATH中找不到可执行文件”