开发者社区> 问答> 正文

为什么在linux下C语言中使用math.h中的公式编译时就要加参数-lm, windows中却不要?

我用的程序

#include<stdio.h>
#include<math.h>
#include<sys/time.h>
int main()
{
    struct timeval start,end;
    gettimeofday(&start,NULL);
    long long i;
    double temp;
    for(i=0;i<10000000;i++)
    {
        temp=sqrt(i);
    }
    gettimeofday(&end,NULL);
    long timeuse =1000000 * ( end.tv_sec - start.tv_sec )  \
    + end.tv_usec - start.tv_usec;
    printf("\ntime=%f\n",timeuse /1000000.0);
    return 0;
}

展开
收起
a123456678 2016-06-21 14:35:07 2526 0
1 条回答
写回答
取消 提交回答
  • gcc是个编译器。。和cl.exe是一个级别的。
    顶多就能让你的sqrt(4);直接优化成数字2,
    例如这个情况就不用-lm

    #include<stdio.h>
    int main(){
    printf("%d",(int)sqrt(4));
    }
    不能只能处理相关的链接库问题,
    毕竟谁都不知道到底程序员会不会自己手动写了个libm.so。
    
    凡是用到的动态链接库都得自己写-l参数,
    例如这个情况下默认就不会直接把sqrt(4)优化成(double)2:
    
    #include<stdio.h>
    int main(){
    int i=4;
    printf("%d",(int)sqrt(i));
    }
    2019-07-17 19:44:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 技术揭秘 立即下载
Alibaba Cloud Linux 3 发布 立即下载
ECS运维指南之Windows系统诊断 立即下载