【发布时间】:2021-06-18 22:42:26
【问题描述】:
为什么会出现以下错误
/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 选项的顺序在这里很重要? 还是我做错了什么?
【问题讨论】:
-
你做对了,由于“历史原因”,订单很重要。我认为他们现在只是避免出于怀旧而修复它
-
-lm使 gcc 在该库中查找它在命令行中需要的东西......所以gcc -o a.out -lm不需要数学库中的任何东西......和gcc -o a.out -lm MyCode.c编译 MyCode.c 时不使用该库。 TLDR 始终在命令行末尾添加库:gcc -std=c11 -pedantic -Wall -Wextra -O... -f... -o executable *.c -l... -
这也花费了我很多时间 :) 但是不幸的是顺序确实很重要