gcc编译选项-o和-c介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/88376143

一 选项-o

1 点睛

选项-o用于指定要生成的结果文件,后面跟的就是结果文件名字。

o是output的意思,不是目标的意思。

结果文件可能是预处理文件、汇编文件、目标文件或者最终可执行文件。

2 示例

gcc -S test.i -o test.s
# -S 说明只进行到编译阶段
# 生成汇编文件test.s

3 示例

gcc -c test.cpp -o test
# 这个gest是目标文件,不是可执行文件,因为这里用到了-c,告诉gcc到汇编为止,不要进行链接。
gcc -c test.cpp -o test.o
# 这个test.o和test一样,都是目标文件

4 示例

gcc test.c -o test
# 生成可执行文件test

二 选项-c

1 点睛

选项-c告诉gcc对源文件进行编译会汇编,但不进行链接。此时,将生成目标文件,如果没有指定输出文件,就生成同名的.o文件。

2 示例

[root@localhost temp]# gcc -c test.cpp
[root@localhost temp]# ll
total 8
-rw-r--r--. 1 root root  188 Mar 10 11:00 test.cpp
-rw-r--r--. 1 root root 1504 Mar 10 11:00 test.o
# 生成了目标文件test.o

3 示例

[root@localhost temp]# gcc -c test.cpp -o test
# test是目标文件,而不是可执行文件,下面测试可证明,它和test.o内容相同
[root@localhost temp]# ls
test  test.cpp  test.o
[root@localhost temp]# ./test
-bash: ./test: Permission denied
[root@localhost temp]# chmod +x test
[root@localhost temp]# ./test
-bash: ./test: cannot execute binary file
[root@localhost temp]# md5sum test.o
3edeaa07cd496b92e1fd5c287de2131b  test.o
[root@localhost temp]# md5sum test
3edeaa07cd496b92e1fd5c287de2131b  test

4 -c后跟多源文件情况

当-c后跟多个源文件,会为每个源文件生成一个.o文件,但此时是不能使用-o的。

5 实战

test1.cpp内容

[root@localhost temp]# cat test1.cpp
#include <stdio.h>
int t1()
{
    bool b=false;  //如果文件命名为test.c就会报错,因为C语言没有bool类型
    printf("hello, boy \n" );  
    return 0;
}

test2.cpp内容

[root@localhost temp]# cat test2.cpp
#include <stdio.h>
int t2()
{
    bool b=false;  //如果文件命名为test.c就会报错,因为C语言没有bool类型
    printf("hello, boy \n" );  
    return 0;
}

进行-c编译和汇编

[root@localhost temp]# ll
total 12
-rw-r--r--. 1 root root 186 Mar 10 11:05 test1.cpp
-rw-r--r--. 1 root root 186 Mar 10 11:06 test2.cpp
-rw-r--r--. 1 root root 188 Mar 10 11:00 test.cpp
[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp
[root@localhost temp]# ls
test1.cpp  test1.o  test2.cpp  test2.o  test.cpp  test.o
# 可以看到,分别生成了3个.o文件
# -c 企图用-o,会报错
[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp -o test.o
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
# 如果直接生成可执行文件(不用-c),即使有多个源文件,-o也是可用的。
[root@localhost temp]# gcc test.cpp test1.cpp test2.cpp -o test
[root@localhost temp]# ls
test  test1.cpp  test1.o  test2.cpp  test2.o  test.cpp  test.o
[root@localhost temp]# ./test
hello, boy

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/88376143