正在加载图片...
Linux操作系统下c语言编程入门 mytool lo: mytoollc mytooll h gcc-c S< mytool2. o mytool2 c 经过简化后我们的 Makefile是简单了一点不过人们有时候还想简单一点这里我们学习 个 Makefile的缺省规则 gcC-C S< 这个规则表示所有的。文件都是依赖与相应的c文件的例如 mytool.o依赖于 mytool. c 这样 Makefile还可以变为 #这是再一次简化后的 Makefile main: main.o mytoollo mytool2o gcc-o Sa s gcc-c$ 好了我们的 Makefile也差不多了,如果想知道更多的关于 Makefile规则可以查看相应的 文档 3程序库的链接 试着编译下面这个程序 #include <math.h> nt main(int argc, char **argv) double value printf("Value: %f\n", value); 这个程序相当简单但是当我们用gcc- o temptemp.c编译时会出现下面所示的错误 /tmp/cc33Kydu.o: In function main tmp/cc33Kydu o( text+Oxe): undefined reference to 'log collect2 Id returned l exit status 出现这个错误是因为编译器找不到log的具体实现虽然我们包括了正确的头文件但是我 们在编译的时候还是要连接确定的库在 Linux下,为了使用数学函数我们必须和数学库 连接为此我们要加入-m选项gc- o temp temp. c-lm这样才能够正确的编译也许 有人要问,前面我们用 printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函 数的实现gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了有时 候我们在编译程序的时候还要指定库的路径这个时候我们要用到编译器的-L选项指定 路径比如说我们有一个库在home/ hoyt/mylib下,这样我们编译的时候还要加上-Lh ome/hoyt/mylib对于一些标准库来说我们没有必要指出路径只要它们在起缺省库的路 径下就可以了系统的缺省库的路径/ lib /usr/ib/usr/ ocal/ib在这三个路径下面 的库我们可以不指定路径 还有一个问题,有时候我们使用了某个函数但是我们不知道库的名字,这个时候怎么办呢 很抱歉对于这个问题我也不知道答案我只有一个傻办法首先我到标准库路径下面去 第4页共84页Linux 操作系统下 c 语言编程入门 gcc -c $< mytool1.o:mytool1.c mytool1.h gcc -c $< mytool2.o:mytool2.c mytool2.h gcc -c $< 经过简化后我们的 Makefile 是简单了一点,不过人们有时候还想简单一点.这里我们学习 一个 Makefile 的缺省规则 ..c.o: gcc -c $< 这个规则表示所有的 .o 文件都是依赖与相应的.c 文件的.例如 mytool.o 依赖于 mytool.c 这样 Makefile 还可以变为: # 这是再一次简化后的 Makefile main:main.o mytool1.o mytool2.o gcc -o $@ $^ ..c.o: gcc -c $< 好了,我们的 Makefile 也差不多了,如果想知道更多的关于 Makefile 规则可以查看相应的 文档. 3.程序库的链接 试着编译下面这个程序 /* temp.c */ #include <math.h> int main(int argc,char **argv) { double value; printf(“Value:%f\n”,value); } 这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误. /tmp/cc33Kydu.o: In function `main': /tmp/cc33Kydu.o(.text+0xe): undefined reference to `log' collect2: ld returned 1 exit status 出现这个错误是因为编译器找不到 log 的具体实现.虽然我们包括了正确的头文件,但是我 们在编译的时候还是要连接确定的库.在 Linux 下,为了使用数学函数,我们必须和数学库 连接,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm 这样才能够正确的编译.也许 有人要问,前面我们用 printf 函数的时候怎么没有连接库呢?是这样的,对于一些常用的函 数的实现,gcc 编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时 候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L 选项指定 路径.比如说我们有一个库在 /home/hoyt/mylib 下,这样我们编译的时候还要加上 -L/h ome/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路 径下就可以了.系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面 的库,我们可以不指定路径. 还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢 ?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先,我到标准库路径下面去 第 4 页 共 84 页
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有