搜尋

首頁  >  問答  >  主體

为什么在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;
}
天蓬老师天蓬老师2773 天前784

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-04-17 13:12:29

    gcc是個編譯器。 。和cl.exe是一個等級的。
    頂多就能讓你的sqrt(4);直接優化成數字2,
    例如這個情況就不用-lm

    C#include<stdio.h>
    int main(){
    printf("%d",(int)sqrt(4));
    }
    

    不能只能處理相關的連結庫問題,
    畢竟誰都不知道到底程式設計師會不會自己手動寫了個libm.so。

    凡是用到的動態連結函式庫都得自己寫-l參數,
    例如這個情況預設就不會直接把sqrt(4)優化成(double)2

    C#include<stdio.h>
    int main(){
    int i=4;
    printf("%d",(int)sqrt(i));
    }
    

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:12:29

    如果真是這樣的話,那麼就說明windows編譯器中預設包含了mathlib了

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:12:29

    手邊沒有VC++編譯器,應該是已經合併到msvcrt裡了,跟thread一樣,linux下還要-lpthread,VC就不用了。
    http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx

    回覆
    0
  • 取消回覆