Linux下gcc无法#include

Linux下gcc无法#include

在google上搜索解决方案,得到下面的结果:

2.4.1 常见 cc 问题

2.4.1.1. 我尝试写一个程序,其中使用了 sin() 这个函数。但是我却得到了如下的错误。这个错误是什么意思?

/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segment

当使用像 sin() 这样的数学函数的时候,你必 须告诉 cc 把数学函数库给连接进来,就像这样:

% cc -o foobar foobar.c -lm

2.4.1.2. 好的,我写了一个简单的程序,练习使用 -lm。也 就是计算 2.1 的 6 次方。

#include

int main() {
float f;

f = pow(2.1, 6);
printf(“2.1 ^ 6 = %f\n”, f);
return 0;
}

然后我编译:

% cc temp.c -lm

就像你说的我应该做的那样。但是我在运行的时候却有如下提示:

% ./a.out
2.1 ^ 6 = 1023.000000

这个 不 是正确的答案!到底怎么了?

当编译器看见你调用了一个函数,它会检查是否已经有了一个相配合的 原始类型 (prototype),如果没有,编译器会假定函数的返回值是 整数,恰恰不是你的程序想要的结果。

2.4.1.3. 那么我怎么才能改正这个错误?

数学函数的声明原型都在 math.h 里面。如果你引用了这个文件,编译器就能找到这个原型然后就不会对你的计算做奇怪的 干扰。

#include
#include

int main() {

像以前一样编译,然后再运行:

% ./a.out
2.1 ^ 6 = 85.766121

如果你使用了任何一个数学函数,一定要记得 引用 math.h 这个文件,并且连接数学函数库。

2.4.1.4. 我编译了一个文件叫 foobar.c 但是我没有找 到叫 foobar 的执行文件。这个文件到哪里去了?

记住,除非你指定一个名字,cc会把编译出的文 件叫做 a.out。使用 -o filename 这个选 项:

% cc -o foobar foobar.c