【问题标题】:libm link issue in gcc 4.6.3gcc 4.6.3 中的 libm 链接问题
【发布时间】:2012-10-25 00:16:18
【问题描述】:

在 gcc 4.6.3 中使用 -lm 链接 math.lib 的方式有所不同。

它用于工作 gcc -lm file.c,但在 gcc 4.6.3 中它的 gcc file.c -lm

这种变化的原因是什么?或者它是一个错误?

谢谢

这是代码的一部分。

    float i = 100;
    printf("%f", sqrt(i));
    return 0;

我是这样遵守的

gcc -lm mat.c

/tmp/ccPxTEjS.o:在函数'main'中:

mat.c:(.text+0x2c): undefined reference to `sqrt'

collect2: ld 返回 1 个退出状态

操作系统:Ubuntu 12.04

【问题讨论】:

  • 这真让我吃惊。你确定吗?如果您在 4.6.3 上运行 gcc -lm file.c,实际会发生什么?您没有具体说明问题所在。
  • 问题成立。会发生什么?
  • @JonathonReinhart 使用示例代码对问题进行了更改。
  • @AnishChandran:我环顾四周,得出了相互矛盾的结论:有些人指责 gcc,有些人指责 binutil 链接器。我自己也不知道确切的答案。 Basile Starynkevitch 的建议可能是正确的。

标签: c linux math gcc linker


【解决方案1】:

你说你试图编译为:

gcc -lm mat.c

gcc 的某些配置需要严格的选项排序,这要求库在使用它们的源代码之后:

gcc mat.c -lm

这行得通吗?

【讨论】:

  • 大多数配置gcc 在 Linux 要求在源代码之后的库。这在 Linux 和其他 Unix 上总是如此。几十年来从未改变。
  • 这与 GCC 关系不大,而与 Binutils 关系更大。在 OS X 上,GCC 很常见,但 Binutils 不是,您可以按任意顺序指定库。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多