V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chanlion
V2EX  ›  C

GCC Basic

  •  
  •   chanlion · 2018-04-14 23:23:51 +08:00 · 2363 次点击
    这是一个创建于 2410 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想学好编程 C/C++应该是个避不开的,因为几乎所有重要的程序的底层都是用 C/C++写的,而绝大多数的开源 C/C++都是用 GCC 编译下 Linux 运行环境中,所以掌握 GCC 的用法是十分必要的,了解 GCC 在 Linux 下编译程序的步骤是非常有必要的。

    GCC 是 GNU Compiler Collection 的缩写,这个编译器套件支持多种语言,最著名就是 C 和 C++ 了。别的一些语言像 Java 用的肯定就少了,但是它也支持,还支持 Fortan、Objcect-C、Ada 语言。除了 GCC 之外,GNU 定义一套 GNU Toolchain 来开发应用和操作系统,这些都是非常有必要去了解的,比如 Autotools 中的 Automake、Autoconf、Autohead 就在程序跨平台编译中起到重要作用,我观察在开源的项目中有不少应用到此工具。gdb(GNU Debugger)用来调试 C/C++ 程序非常有用,可以打断点、看到堆栈信息以及局部变量的值,跟在 IDE 中使用调试工具没什么两样,这样就在 print 的基础上多一个有力的工具。而 gdb 的用处还不仅仅在于此,gdb 可以看到 CoreDump 的堆栈信息,能够在程序崩溃时定位到具体的问题,我就因此受益了,前段时间我的棋牌服务器程序总是莫名宕机,通过 gdb 查看 CoreDump 文件的信息发现了是缓冲区溢出导致的。GNU Make 这个不用多说,几乎任何 Linux 下的项目都会手写或者生成一个 Makefile 文件,前面的 Automake 生成的也是 Makefile 文件。还有 GNU Binutils 包括链接( ld )、装载和汇编器这些重要工具。以及 GNU Bison 一个词法生成器,还有就是 m4 通用宏语言。

    可以看出整个这一套工具围绕都是怎样编译程序最终生成一个可执行的文件,这套工具链构建了几乎整个 Linux 大厦,并且繁荣了 C/C++ 几十年之久。我很想学好 C/C++ 语言,投资这套东西绝对是有益的。

    https://mrlongx.com/index.php/2018/04/13/gcc-basic/

    3 条回复
    linux40
        1
    linux40  
       2018-04-15 10:27:08 +08:00 via Android
    autotools 有什么靠谱的生成 compile_commands.json 的工具吗?试过`bear make`,结果生成了一个空的。
    tempdban
        2
    tempdban  
       2018-04-15 10:54:35 +08:00 via Android
    @linux40 不是 CMake 好像只有 bare
    linux40
        3
    linux40  
       2018-04-15 18:40:26 +08:00 via Android
    @tempdban 转 CMake 也可以,不过我网上查了一下,以前 KDE 这么干过,用了 autotools 转 CMake,但是脚本找不到了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.