gcc编译问题
来源:互联网 发布:风暴幻想坐骑进阶数据 编辑:程序博客网 时间:2024/05/09 16:48
从起点开始,打好基础,开始linux下C编程的旅程~~
linux 2.4.20
进行编译test
[root@m9s xltest]# gcc -o test test.c
In file included from /usr/include/errno.h:36,
from test.c:8:
/usr/include/bits/errno.h:25:26: linux/errno.h: No such file or directory
手动改了两个文件把原有的路径改成绝对路径了:
修改/usr/include/bits/errno.h
将# include <linux/errno.h>
修改成#include </usr/src/linux-2.4/include/linux/errno.h>
[root@m9s xltest]# gcc -o test test.c
/tmp/ccAwcENr.o(.text+0xa3): In function `main':
: undefined reference to `sin'
collect2: ld returned 1 exit status
书上记载(稍做修改):
(编译的时候要加 -lm 以便连接数学函数库 include/math.h)
出现这个错误是因为编译器找不到 sin 的具体实现.虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库.在 Linux 下,为了使用数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o test test.c -lm这样才能够正确的编译.对于一些常用的函数(如printf)的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了.有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L 选项指定路径.比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上-L /home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.
有时候我们使用了某个函数,但是我们不知道库的名字,这个时候首先,我到标准库路径下面去找看看有没有和我用的函数相关的库, 当然,如果找不到,只有一个笨方法.比如我要找 sin 这个函数所在的库. 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin 文件,到那里面去找了. 在 sin 文件当中,我会找到这样的一行 libm-2.1.2.so: 00009fa0 W sin 这样我就知道了 sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的 lib 和后面的版本标志,就剩下 m 了所以是 -lm).
本例代码如下:
- gcc编译问题
- gcc 编译乱码问题
- gcc 编译问题
- gcc编译问题
- gcc编译问题
- gcc编译c问题
- gcc 编译顺序问题
- iphone&ipad编译 gcc问题
- gcc -m64 -fPIC 编译问题
- gcc-4.1.2编译问题
- gcc 编译顺序的问题
- LFS gcc第一遍编译问题-
- gcc编译遇到到不能编译问题
- centos nginx安装问题/gcc编译问题
- 关于gcc和g++编译的问题
- gcc编译时候的小问题
- gcc g++多文件编译问题!
- Android编译中GCC版本问题
- 推荐一本PHP好书--->
- 改变Google App Engine的javac编译器编码
- 适合嵌入式Linux 2.4内核的usb hotplug
- 获取某一字段唯一值
- 在sql语句中替换Not In 的方法
- gcc编译问题
- CI中的数据库操作
- ADO.NET中使用DataSet类
- 写个自己的调试器
- 管理的秘诀是诚实
- c++中的堆和栈
- 遗书二
- IBM FASTT StorageManager的使用(DS4000系列存储管理软件)
- 技巧和诀窍:在不用UpdatePanel的情形下可与ASP.NET AJAX 使用的酷UI模板技术