那么,在已编辑好 C 语言或者 C++ 代码的前提下,如何才能调用 GCC 编译器为我们编译程序呢?很简单,GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器。除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。但本教程主要讲解如何使用 GCC 编译器编译运行 C 和 C++ 程序,因此有关其它编程语言如何使用 GCC 编译器编译,将不再做具体讲解。
但如果使用 g++ 指令,则无论目标文件的后缀名是什么,该指令都一律按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件来说,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译。当然,gcc 指令也为用户提供了“手动指定代表编译方式”的接口,即使用 -x 选项。例如,gcc -xc xxx 表示以编译 C 语言代码的方式编译 xxx 文件;而 gcc -xc++ xxx 则表示以编译 C++ 代码的方式编译 xxx 文件。有关 -x 选项的用法,后续会给出具体样例。
//位于 demo.c 文件中 #include <stdio.h> int main() { const char * a = "abc"; printStr(a); return; } int printStr(const char* str) { printf(str); }如上所示,这是一段不规范的 C 语言代码。如果我们使用 gcc 指令编译,如下所示:
[root@bogon ~]# gcc -xc demo.c #或者直接运行 gcc demo.c
[root@bogon ~]#
[root@bogon ~]# g++ demo.c
demo.c: In function ‘int main()’:
demo.c:5: error: ‘printStr’ was not declared in this scope
demo.c:6: error: return-statement with no value, in function returning ‘int’
[root@bogon ~]#
//demo.cpp #include <iostream> #include <string> using namespace std; int main(){ string str ="C语言中文网"; cout << str << endl; return 0; }这是一段很简单的 C++ 程序,其通过 <string> 头文件提供的 string 字符串类定义了一个字符串对象,随后使用 cout 输出流对象将其输出。对于这段 C++ 代码,如果我们使用 g++ 指令编译,如下所示:
[root@bogon ~]# g++ demo.cpp
[root@bogon ~]#
[root@bogon ~]# gcc demo.cpp
/tmp/ccIOnwra.o: In function `main':
demo.cpp:(.text+0x13): undefined reference to `std::allocator<char>::allocator()'
#省略了诸多错误信息
[root@bogon ~]# gcc -xc++ demo.cpp -lstdc++ -shared-libgcc
[root@bogon ~]#
对于 gcc 和 g++ 指令,还有其它更多细节方面的区别,这里不再做更多的赘述。读完本节,读者只需要知道,对于 C 语言程序的编译,我们应该使用 gcc 指令,而编译 C++ 程序则推荐使用 g++ 指令,这就足够了。读者可以这样认为,g++ 指令就等同于
gcc -xc++ -lstdc++ -shared-libgcc
指令。显然后者书写是非常麻烦的,大多数人会更喜欢前者。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有