Linux下C的编译和链接

 


1.源程序的编译

/* main.c */
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}
/* mytool1.h */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
/* mytool1.c */

#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}
/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
/* mytool2.c */
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}

手动编译:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o

Makefile SHell 文件编译
  1 #main:main.o mytool1.o mytool2.o
  2 gcc -o main main.o mytool1.o mytool2.o
  3 #main.o:main.c mytool1.h mytool2.h
  4 gcc -c main.c
  5 #mytool1.o:mytool1.c mytool1.h
  6 gcc -c mytool1.c
  7 #mytool2.o:mytool2.c mytool2.h
  8 gcc -c mytool2.c
  9
 10 #格式:第一行表示的是依赖关系,第二行是规则
 11 #比如main:main.o mytool1.o mytool2.o 表示目标main的依赖
 12 #对象是main.o mytool1.o mytool2.o
 13 #Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:
 14 #$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.
 15 #简化到Makefile如下:
 16 #  main:main.o mytool1.o mytool2.o
 17 #  gcc -o $@ $^
 18 #  main.o:main.c mytool1.h mytool2.h
 19 #  gcc -c $<
 20 #  mytool1.o:mytool1.c mytool1.h
 21 #  gcc -c $<
 22 #  mytool2.o:mytool2.c mytool2.h
 23 #  gcc -c $<

2.程序库的链接
对于一些常用的函数的实现,gcc
编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程
序的时候还要指定库的路径,这个时候我们要用到编译器的 -L 选项指定路径.比如说我们有
一个库在 /home/hoyt/mylib 下,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些
标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库
的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.
对于数学库<math.h>引用,程序进行链接的时候用加-lm
gcc -o temp temp.c -lm

3.函数帮助
如果想知道函数的大概形式,用man fread.
当该函数与命令名相同是 用man 2 write 查看函数说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值