在 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的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse neon C 程序没有构建 g++ 并且在路径错误中找不到 gcc