c - 在更改命令选项顺序时,GCC 错误未定义对“sqrt”的引用
问题描述
为什么我收到以下错误
/tmp/ccuWdVB3.o: In function `test':
MyCode.c:(.text+0x1c): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
我的代码.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 选项的顺序在这里很重要?还是我做错了什么?
解决方案
在链接过程中只搜索一次库(它们可能包含数百万个符号和对象),这就是为什么当链接器必须搜索的所有对象都已知时,它们应该被指定为最后一个的原因。在项目中的每个目标文件之后在巨型库中搜索符号将是非常低效的。
推荐阅读
- apache-spark - 如何检查 PySpark 使用了多少个内核?
- r - 在ggplot的箱线图中添加平均值
- javascript - 如何获取链接元素 ref="stylesheet" 返回的内容?
- webpack-dev-server - 为什么我的带有 BrowserSync 外部主机的 Webpack-Dev-Server 指向本地主机?
- javascript - 有没有办法使用拖放以角度上传 .ply、.stl、.obj 文件?
- sql - 在“结果到文本”选项中设置的 SQL Server 中的自定义分隔符不起作用
- python - Arduino单LED TypeError
- javascript - Javascript 处理来自 ajax 请求的各种响应,并且 response.length = undefined
- python - python中不存在mongodb getSiblingDB方法
- c++ - 我无法使用 SFML 库打开和图像