.
½行
程序的编译与链½
(Link)
# 2.
开
始
½
原始
码编译
成
为
可
执
行的
binary file
:
[root@study ~]#
gcc
-
c thanks.c thanks_2.c
[root@study ~]#
ll thanks*
-
rw
-
r
--
r
--
. 1 root root 75 Sep 4 11:43 thanks_2.c
-
rw
-
r
--
r
--
. 1 root root 1496 Sep 4 11:43 thanks_2.o
<==
编译产
生的!
-
rw
-
r
--
r
--
. 1 root
root 91 Sep 4 11:42 thanks.c
-
rw
-
r
--
r
--
. 1 root root 1560 Sep 4 11:43 thanks.o
<==
编译产
生的!
[root@study ~]#
gcc
-
o thanks thanks.o thanks_2.o
[root@study ~]#
ll thanks*
-
rwxr
-
xr
-
x. 1 root root 8572 Sep 4 11:44 thanks
<==
最
终½
果
会产
生
这
玩意儿
# 3.
执
行一下
这个
文件
:
[root@study ~]#
./thanks
Hello World
Thank you!
知道为什么要制作出目标文件了吗?由于我们的原始码文件有时并非½只有一个文件,所以我们无法
直½½行编译。
这个时候就需要先产生目标文件,然后再以连½制作成为
binary
可执行文件。另外,
如果有一天,你更新了
thanks_2.c
这个文件的内容,则你只要重新编译
thanks_2.c
来产生新的
thanks_2.o
,然后再以连½制作出新的
binary
可执行文件即可!而不必重新编译其他没有更动过的
原始码文件
。
这对于软件开发者来说,是一个很重要的功能,因为有时候要½偌大的原始码全部编
译完成,会花很长的一段时间呢!
此外,如果你想要让程序在执行的时候具有比½好的效能,或者是其他的除错功能时,
可以在编译
的过程里面加入适当的参数,例如底下的例子:
[root@study ~]#
gcc
-
O
-
c thanks.c thanks_2.c
<==
-
O
为产
生优化的
参数
[root@study ~]#
gcc
-
Wall
-
c thanks.c
thanks_2.c
thanks.c: In function
'
main
'
:
thanks.c:5:9: warning: implicit declaration of function
'
thanks_2
'
[
-
Wimplicit
-
function
-
declaration]
thanks_2();
^
thanks.c:6:1: warning: control reaches end of non
-
void function [
-
Wreturn
-
type]
}
^
#
-
Wall
为产
生更
详细
的
编译过
程信息。上面的
讯
息
为
警告
讯
息
(warning)
所以不用理
会
也
没
有
关
系!
至于更多的
gcc
额外参数功能,就得要
man gcc
啰~呵呵!可多的跟天书一样~