C调试记录-linux下交叉编译器gcc如何使用math.h

前言

今天写了个测试代码在linux环境下一直编译不过,看起来也没有问题,就是找不到<math.h>的定义,就是下面的简单代码

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

int fun()
{
    return 5;
}

int fun1()
{
    return (fun() == (1 || 2));
}

void main()
{
    // int a = 12;
    // bool b = true;
    // printf("%d\r\n", a * b);

    // int a = 17;
    // float b = 10.00 / a;

    // printf("%f\r\n", b);

    #define PI 3.14159265358979323846
    #define deg2rad         ((double)(PI / 180.0f))
    #define radius_of_earth (6378137.0f)

    double X = 0,Y = 0,Z = 0;

    for (int i = 0;i < 2;i++)
    {
        double lat, lon, x, y, z;
        lon = (3+i) * 100000000 * deg2rad;
        lat = (3+i) * 100000000 * deg2rad;

        x = cos(lat) * cos(lon);
        y = cos(lat) * sin(lon);
        z = sin(lat);
        X += x;
        Y += Y;
        Z += z;
    }

    X = X/2;
    Y = Y/2;
    Z = Z/2;
    double Lon = atan2(Y,X);
    double Hyp = sqrt(X*X + Y*Y);
    double Lat = atan2(Z,Hyp);
    printf("%f %f\r\n", (Lon * 180 / PI), (Lat * 180 / PI));
    return;
}

现象如下图一直找不到cos函数和其他数学函数的定义
在这里插入图片描述我第一反应是math.h被重写了,换用相对路径下的math.h也无用,后面看到math.h的一行小字才想起来,math.h是C99下的库函数,linux下GCC无法直接引用这个文件,需要添加后缀-lm

在这里插入图片描述
如下图,插入-lm即可引用math.h

keman@NJ-1-04444:~/workspace/test$ gcc test.c -lm
keman@NJ-1-04444:~/workspace/test$ ls
a.out  test  test.c
keman@NJ-1-04444:~/workspace/test$

总结:

linux环境下想引用math.h需要加后缀-lm去引用,math.h是C99环境下的库函数,gcc是交叉编译器不支持这些函数,但是如果在windows环境下使用VS studio等IDE是可以直接引用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值