zoukankan      html  css  js  c++  java
  • g++ 编译单个文件和多个文件

    转载:https://www.cnblogs.com/battlescars/p/cpp_linux_gcc.html 

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

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

    复制代码
    1 /* helloworld.cpp */
    2 #include <iostream>
    3 int main(int argc,char *argv[])
    4 {
    5     std::cout << "hello, world" << std::endl;
    6     return(0);
    7 }
    复制代码

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

    1 $ g++ helloworld.cpp

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

    1 $ ./a.out
    2 
    3 hello, world

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

    1 $ g++ helloworld.cpp -o helloworld

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

    1 $ ./helloworld
    2 
    3 hello, world

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

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

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

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

    1 $ c++ helloworld.cpp -o helloworld

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

    如果多于一个的源码文件在 g++ 命令中指定,它们都将被编译并被链接成一个单一的可执行文件。下面是一个名为 speak.h 的头文件;它包含一个仅含有一个函数的类的定义:

    复制代码
    1 /* speak.h */
    2 #include <iostream>
    3 class Speak
    4 {
    5     public:
    6         void sayHello(const char *);
    7 };
    复制代码

    下面列出的是文件 speak.cpp 的内容:包含 sayHello() 函数的函数体:

    复制代码
    1 /* speak.cpp */
    2 #include "speak.h"
    3 void Speak::sayHello(const char *str)
    4 {
    5     std::cout << "Hello " << str << "
    ";
    6 }
    复制代码

    文件 hellospeak.cpp 内是一个使用 Speak 类的程序:

    复制代码
    1 /* hellospeak.cpp */
    2 #include "speak.h"
    3 int main(int argc,char *argv[])
    4 {
    5     Speak speak;
    6     speak.sayHello("world");
    7     return(0);
    8 }
    复制代码

    下面这条命令将上述两个源码文件编译链接成一个单一的可执行程序:

    1 $ g++ hellospeak.cpp speak.cpp -o hellospeak

    PS:这里说一下为什么在命令中没有提到“speak.h“该文件(原因是:在“speak.cpp“中包含有”#include"speak.h"“这句代码,它的意思是搜索系统头文件目录之前将先在当前目录中搜索文件“speak.h“。而”speak.h“正在该目录中,不用再在命令中指定了)。

  • 相关阅读:
    【转】京东抢购服务高并发实践
    【转】聊聊高并发系统之队列术
    深入研究Clang(八) Clang代码阅读之打log读流程1
    【转】保证分布式系统数据一致性的6种方案
    TextureView实现视频播放
    Spring之FactoryBean
    支付宝系统架构
    【转】高并发系统之限流特技
    Go语言中new和make的区别
    Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set
  • 原文地址:https://www.cnblogs.com/fuhang/p/8917395.html
Copyright © 2011-2022 走看看