Linux主程序子程序编译,链接; makefile编写和tar

2018-07-09  本文已影响0人  洽白

主程序子程序的编译和链接

#include<stdio.h>⇠
int main(void)⇠
{⇠
    printf("Hello World\n");
    thanks();⇠
}⇠
#include<stdio.h>⇠
void thanks(void)⇠
{⇠
    printf("Thanks\n");⇠
}⇠
gcc -c hello.c thanks.c

-c 是免去链接,否则主程序调用 thanks那行会报错。

-c 同时会自动生成 hello.o 与 thanks.o

gcc -o main hello.o thanks.o

部分编译

在上面的基础上,假如我们修改了 thanks.c, 我们不需要全部重新编译, 只需要生成新的thanks.o 再与其他目标文件重新链接即可。 节省时间。

调用动态函数库

记得用pthread写程序的时候,编译时总要在后面加上 -lpthread 选项,这是什么原因呢?

#include <stdio.h>⇠
int main()
{⇠
    float val;⇠
    val = sin (3.14/2);⇠
    printf("%f\n",val);⇠
}
gcc -o main lib.c -lm -L /lib -L /usr/lib

静态函数库和动态函数库

静态函数库

动态函数库

动态函数库解析

ldd xxx.o 可以分析程序涉及哪些动态函数库。

gcc 的常用选项

make的使用

为什么使用make

假如我们的一个项目又很多程序,这些程序相互引用,一些程序还使用到动态函数库。那么我们编译的时候将分很多步进行,特别麻烦。 当我们需要重新编译的时候,所有步骤还是得重新来一遍。能不呢省略呢?

make的基本用法

target:  目标文件1  目标文件2  ...
<tab>    gcc -o  目标文件1  目标文件2

举例说明

还是以上面hello.c, thanks.c 为例, 忘了的朋友可以翻页上去看一下。下面是我们makefile:

main:  hello.o  thanks.o
    gcc -o main hello.o thanks.o
clean:
    rm -f hello.o  thanks.o

可以看到,我有两个target,这两个可以在调用make的时候进行选择:

make main
make clean

其中:

makefile的优化

makefile当中也可以进行变量的定义,可以简化makefile的编写:

OBJS = main.o thanks.o
main:
    gcc -o $@ ${OBJS}
clean:
    rm -f ${OBJS}

Tarball软件的安装

经常我们需要通过源码安装软件,那么它们安装的步骤是怎样的呢?

上一篇下一篇

猜你喜欢

热点阅读