首页 > 代码库 > 源码文件的编译

源码文件的编译

1. 开放源码、编译程序和可执行文件

  开放源码:程序代码,写给人类看的程序语言,机器并不识别,所以无法执行。

  编译程序:将开放源码转译成机器看的懂的语言。

  可执行文件:经过编译程序变成二进制程序后机器看得懂的可执行的文件。

2. 程序的编译

  1)单文件的编译运行

 //hello.c #include<stdio.h>  int main() {     printf("Hello World\n");     return 0; }

   开始编译

gcc hello.c

   生成文件可执行文件a.out, 运行a.out

./a.out

  输出运行结果

Hello World

  2) 多文件的编译

// thanks.c#include<stdio.h>int main(void){    printf("Hello World\n");    thanks2();    return 0;}
// thanks2.c#include<stdio.h>void thanks2(){    printf("Thank you!\n");}

  编译文件:

gcc -c thanks.c thank2.c

  生成两个目标文件 thanks.o, thanks2.o.

  进行链接 :

gcc -o thanks thanks.o thanks2.o

  生成可执行文件 thanks, 执行thanks

./thanks

  输出结果

Hello WorldThank you!

3. 调用外部库函数

  假如要在函数中调用sin函数, 由于sin函数是在libm.so这个函数库中, 就需要在编译与链接的时候把libm.so函数库链接进执行文件

gcc sin.c -lm -L/lib -L/user/lib

  其中

  -l: 是加入某个函数库的意思

  m: 则是加入libm.so或者libm.a函数库的意思. (lib与扩展名.a, .so不需要写)

  -L: 则表示在后接的路径/lib 和/user/lib中搜索函数库(事实上,这两个函数库路径是默认的, 可以略去)

  此外, 对于源文件中的 #include <stdio.h>, 需要在/usr/include/stdio.h 找到.当头文件放在其他位置时,就需要通过如下语句来读取头文件放置的目录

gcc sin.c -lm -I/user/include

 

源码文件的编译