前言
今天写了个测试代码在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是可以直接引用的