c - GCC 错误 undefined reference to `sqrt' on changing command option order

标签 c gcc sqrt math.h

<分区>

为什么会出现以下错误

/tmp/ccuWdVB3.o: In function `test':
MyCode.c:(.text+0x1c): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

MyCode.c

#include<stdio.h>
#include<math.h>

int test(int input1)
{

  int x = 8;
  int z = sqrt(x);
    
}

int main(int argc, char * a[]) {

}

使用命令运行时:

gcc -o a.out -lm MyCode.c

但是当我运行命令的时候

gcc MyCode.c -o a.out -lm

一切正常。为什么“MyCode.c”cli 选项的顺序在这里很重要? 还是我做错了什么?

最佳答案

库在链接过程中只被搜索一次(它们可能包含数百万个符号和对象),这就是为什么当链接器必须搜索的所有对象都已知时,它们应该被指定为最后一个库的原因。在项目中的每个目标文件之后在巨大的库中搜索符号将是极其低效的。

关于c - GCC 错误 undefined reference to `sqrt' on changing command option order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66743478/

相关文章:

c++ - 使用 C 从事件目录访问用户信息

c++ - 如何防止sqrt溢出?

c - 数组的最后一个元素将自身更改为另一个数组的第一个元素

c++ - 内存中的 Ascii 到十进制,是否会有按位移位的答案?

gcc在报告 "assignment from incompatible pointer type"时可以显示指针类型吗?

c - C中int类型的sqrt()

delphi - Delphi 和 Free Pascal 中的 SQRT 函数的准确度如何?

c - c语言中的JOIN函数,valgrind问题

c - 决定平均类(class)成绩的计划

c++ - 在 gcc 和 Visual C++ 中使用 '>>'