Compiling Cpp:修订间差异

来自Ubuntu中文
跳到导航跳到搜索
Dbzhang800留言 | 贡献
Dbzhang800留言 | 贡献
无编辑摘要
第43行: 第43行:
在大多数系统中,GCC 安装是会安装一名为 c++ 的程序。如果被安装,它和 g++ 是等同,如下例所示,用法也一致:
在大多数系统中,GCC 安装是会安装一名为 c++ 的程序。如果被安装,它和 g++ 是等同,如下例所示,用法也一致:
     $ c++ helloworld.cpp -o helloworld
     $ c++ helloworld.cpp -o helloworld
==多个源文件生成可执行程序==


==源文件生成对象文件==
==源文件生成对象文件==
==多个源文件生成可执行程序==


==编译预处理==
==编译预处理==

2008年3月12日 (三) 17:09的版本

C++ 编程中相关文件後缀

.a 静态库 (archive)
.C, .c++, .cc, .cp, .cpp, .cxx C++源代码(需要编译预处理)
.h C或者C++源代码头文件
.ii C++源代码(不需编译预处理)
.o 对象文件
.s 汇编语言代码
.so 动态库
<none> 标准C++系统头文件

单个源文件生成可执行程序

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

    /* helloworld.cpp */
    #include <iostream>
    int main(int argc,char *argv[])
    {
          std::cout << "hello, world\n";
          return(0);
    }

程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:

    $ g++ helloworld.cpp

编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++ 源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:

    $ ./a.out
    hello, world

更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件:

    $ g++ helloworld.cpp -o helloworld

在命令行中输入程序名可使之运行:

   $ ./helloworld
   hello, world

程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:

   $ gcc helloworld.cpp -lstdc++ -o helloworld

选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libstdc++.a。而后它在标准库路径中查找该库。gcc 的编译过程和输出文件与 g++ 是完全相同的。

在大多数系统中,GCC 安装是会安装一名为 c++ 的程序。如果被安装,它和 g++ 是等同,如下例所示,用法也一致:

   $ c++ helloworld.cpp -o helloworld

多个源文件生成可执行程序

源文件生成对象文件

编译预处理

生成汇编代码

创建静态库

创建共享库