怎么在linux下编程_学习linux系统编程必须在linux下吗 - CSDN
  • Linux下编程环境(一)

    千次阅读 2018-06-26 12:24:04
    GCC(GNU Compiler Collection,GNU编译器套件):是由GNU开发的编程语言编译器。GCC编译器套件支持多种语言的编译,包括了C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库。下面表格...

    1、GCC简介

    GCC(GNU Compiler Collection,GNU编译器套件):是由GNU开发的编程语言编译器。GCC编译器套件支持多种语言的编译,包括了C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库。下面表格中列了些对于C、C++相关的主要软件包: 
    
    名称 功能
    cpp C预处理器
    gcc C编译器
    g++ c++编译器
    gccbug 创建BUG报告的shell脚本
    gcov 覆盖测试工具,用于分析程序哪里做优化效果最佳
    libgcc GCC的运行库
    libstdc++ 标准的C++库
    libsupc++ 提供支持C++语言的函数库

    2、GCC使用方法

    2.1、最基本用法

    $ gcc [选项扩展名] [文件名]

    用于编译和链接C/C++程序所需的选项扩展名及介绍:


    表1 C/C++程序常用文件名后缀

    选项扩展名 文件内容
    .a 静态库,由目标文件构成的文件库
    .c C语言源码,必须经过预处理
    .C,.cc或.cxx c++源代码文件,必须经过预处理
    .h C/C++语言源代码的头文件
    .i .c文件经过预处理后得到的C语言源代码
    .ii .C,.cc或.cxx文件经过预处理后得到的C语言源代码
    .o 目标文件,是编译过程得到的中间文件
    .s 汇编语言文件,是.i文件编译后得到的C++源码文件
    .so 共享对象库,也称动态库

    2.2、GCC编译过程

    注:以下列子以hello.c文件进行举例
    这里写图片描述
    (1)、预处理:C编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等。
    预处理的gcc命令:

    $ gcc -E hello.c -o hello.i

    (2)、编译:将预处理得到的源代码文件进行”翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件。
    编译的gcc命令:

    $ gcc -S hello.i

    (3)、汇编:将汇编代码翻译成机器码,但是还是不可以运行。
    汇编的gcc命令:

    $ gcc -c hello.s

    (4)、链接:处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息,通常是虚拟地址。
    链接的gcc命令:

    $ gcc hello.o  //默认生成a.out执行文件
    $ gcc hello.o -o hello //通过-o参数命令指定生成新的执行文件名

    注:链接分为动态链接和静态链接。
    a、动态链接:使用动态链接库进行链接,生成的程序在执行的时候需要加载所需要的动态库才能运行。动态链接生成的程序小巧,但是必须依赖动态库,否则无法执行。可以说linux下的动态链接库实际是共享目标文件,一般是.so文件,类似于windows下的.dll文件。
    b、静态链接:使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过体积较大。linux下静态库是汇编产生的.o文件的集合,一般以.a文件形式出现。
    c、gcc默认是动态链接,加上-static参数则采用静态链接。

    $gcc hello.o -static -o hello_static

    表2 常用的GCC编译控制选项

    名称 功能描述
    -c 只编译不连接。编译器只是将输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件
    -S 只对文件进行编译,不汇编和链接
    -E 只对文件进行预处理,不编译汇编和链接
    -o output_filename 确定输出文件的名称为output_filename,这个名称不能和源文件同名,若不给出名称,将默认生成可执行文件a.out
    -g 产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,就必须加入这个选项。g也分等级,默认是-g2,-g1是最基本的,-g3包含宏信息
    -DFOO =BAR 在命令行定义预处理宏FOO,值为BAR
    -O 对程序进行优化编译、链接。采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、链接的速度就相应地慢一些
    -ON 指定代码的优化等级为N,可取值为0,1,2,3;O0没有优化,O3优化级别最高
    -Os 使用了-O2的优化部分选项,同时对代码尺寸进行优化
    -I dirname 将dirname目录加入到程序头文件搜索目录列表中,是在预编译过程中使用的参数
    -L dirname 将dirname目录加入到库文件搜索目录列表中
    -l FOO 链接名为libFOO的函数库
    -static 链接静态库
    -ansi 支持ANSI/ISO C的标准语法,取消GNU语法中与该标准相冲突的部分
    -w 关闭所有警告,不建议使用
    -W 开启所有gcc能提供的警告
    -werror 将所有警告转换为错误,开启该选项,遇到警告都会终止编译
    -v 显示gcc执行时的详细过程,GCC及其相关程序的版本号

    2.3、头文件的包含

    在C程序中头文件的包含有两种方式:

    1)、#include<stdio.h>
    (2)、#include"stdio.h"

    对于(1)使用尖括号的情况,预处理器会在系统预设的头文件包含目录搜索头文件
    对于(2)使用双引号的情况,预处理会先在目标文件所在目录进行相应的头文件的搜索,如果当前目录没有,则会到系统预设的头文件包含的目录继续搜索。
    注:在编译的时候也可以通过 -I dirname参数命令将指定的目录添加到头文件搜索目录列表中。

    $ gcc -v hello.c -I /home/vmuser/hello

    2.4、库文件链接

    在实际产品开发过程中,往往会对某个产品的一些功能进行封装,以库文件的形式发布,给第三方用户使用。第三方用户拿到这个库文件,就必须在编译的时候将这个库链接到应用程序中。
    库文件用法有两种:
    (1)、在编译列表中写出库文件全名(可带路径),在这里假设一个静态库文件名为libsos.a/libsos.so,那么链接方式为:

    $gcc hello.c libsos.a 
    $gcc hello.c libsos.so

    (2)、分别用 -L指定库文件路径,并用 -l参数加上FOO名称即可,无需库文件全名。
    a、将libsos.so所在目录添加到系统库文件搜索路径中,在编译的时候通过 -L dirname 完成。

    $ gcc hello.c -L /home/vmuser/hello

    b、指定链接库文件名,在编译的时候可通过 -lFOO参数将libsos.so链接到应用中:

    $gcc hello.c -L /home/vmuser/hello -lFOO

    注:使用了第三方库动态编译的可执行程序,在运行的时候还需要加载相应的库文件,但库文件的存放路径无需与编译路径一致,只要放在运行系统环境的库文件路径即可。

    2.5、静态库和共享库的创建

    (1)、静态库是.o文件的集合,这些.o文件是编译器按照常规方法生成的,在Linux下也称文档(archive),用ar工具来管理。
    下面以用两个C文件创建静态库为例:在用户主目录下,创建一个libhelloa目录,并在其中创建hello1.c和hello2.c两个文件。
    将两个文件编译成目标文件:

    $gcc -c hello1.c hello2.c

    用ar命令创建静态库文件:

    $ar -r libhello.a hello1.o hello2.o

    (2)、共享库也是目标文件的集合,但这些文件是由编译器按照特殊方式生成的,对象模块的每个地址(函数调用和变量引用)都是相对地址,允许在运行时被动态加载和运行。
    创建共享库首先需要编译对象模块。继续以hello1.c和hello2.c为例进行示范。
    在用户主目录下,创建一个libhelloso目录,并在其中创建hello1.c和hello2.c两个文件。

    $gcc -c - fpic hello1.c hello2.c

    与创建静态库不同,这里加入了-fpic参数,表示生成的对象模块是可重定位的,pic表示位置独立代码。
    编译完成,得到了hello1.o和hello2.o两个文件,再用下列命令生成共享库。

    $gcc -shared hello1.o hello2.o  -o libhello.so
    展开全文
  • 在linux下开发(学习步骤)

    千次阅读 2007-05-24 16:52:00
    很多从朋友想学习如何在linux下做开发,我自己走过很多弯路,买过很多冤枉书,根据我个人的经历,我觉得这样的一个学习流程是比较合理的(个人看法):1、先熟悉linux系统的常用命令。2、深入学习emacs或者vim。值得...
            很多从朋友想学习如何在linux下做开发,我自己走过很多弯路,买过很多冤枉书,根据我个人的经历,我觉得这样的一个学习流程是比较合理的(个人看法):
    1、先熟悉linux系统的常用命令。
    2、深入学习emacs或者vim。值得你花半年时间系统学习!以后我们就是用这个编辑器来写程序的了,经过配置,emacs完完全全就是一个IDE了,像代码跳转,自动补齐(智能感应)以及其他的一些好用功能。
    3、学习makefile的编写。因为我们是用makefile来组织我们的程序的就像vc6里头又dsp/dsw文件一样(当然也vc自己的makefile)。有些好的工具能帮助我们编写可以移植的makefile,如autoconf等。
    4、学习用GUN的开发工具链,如gcc,gdb,ldd,ld,……
    5、学习linux的系统调用以及一些开源库。看看那些高手写的代码,长见识。学习cvs,因为大多数开源代码都是cvs管理的,用cvs 把代码搞下来。
    6、编写自己的代码,完成工作
    ……
     大家遇到问题最多的估计就是如何搭建一个类似VC这样好用的IDE了,呵呵……,多花点时间学习emacs,会受益无穷的。还有就是gdb调试时感觉不是很方便,其实gdb配合emacs用比vc6都好用呢!当然makefile编写也会让很多人畏惧,坚持一下就好了,特别是学会了atuoconf等工具,写个makefile还是非常容易的。

    推荐读物:
    linux系统使用:《鸟哥的LINUX私房菜:基础学习篇
    emacs学习:《学习GNU EMACS(第二版)
    linux开发工具学习:《LINUX & UNIX程序开发基础教程
    linux系统调用学习:《UNIX/LINUX编程实践教程 》,《UNIX环境高级编程(第2版)
    makefile学习呢,就在网上搜一下吧,参考一下别人的,犯不着买书,如果实在想买呢,《GNU MAKE项目管理(第三版完全修订版)(中文版) 》也不错!
    cvs,在网上搜搜,教程很多的。
    展开全文
  • 如何用Linux进行简单的C语言编程

    万次阅读 2018-08-25 20:52:04
    采用的是虚拟机模拟的Linux环境。   启动虚拟机中的cenos,登陆并进入Linux环境。 打开MobaXterm Personal Edition,里面也有一个centos。MobaXterm Personal Edition中编辑较为方便。 2、开始编程 ...

    1、准备gonz工作。

    采用的是虚拟机模拟的Linux环境。

     

    启动虚拟机中的cenos,登陆并进入Linux环境。

    打开MobaXterm Personal Edition,在里面也有一个centos。在MobaXterm Personal Edition中编辑较为方便。

    2、开始编程

    键入“vim test.c”,按回车键,进入“test.c”的编程环境。

    按一下“a”键,进入可编程模式,键入一个简单的命令,输出“hello,world!”

    按“esc”键退出编辑模式。按住“ctrl+:”,如果想baoc保存文件,则在此基础上jian键入“wq”,不想保存,则在此基础上键入“q!”。

    保存后的文件可以用“ls”来查看,存在test.c。

    展开全文
  • 怎么在Linux下编程

    千次阅读 2014-12-19 23:49:27
    终端中输入 vim test.c 回车进入vim编辑器,再按一下a键,进入编辑状态,然后输入如下C语言语句: #include int main() { printf("hello world!\n"); } 到此,按esc键退出编辑状态,再输入一个冒号...
    先在终端中输入
         vim test.c 
     
        回车进入vim编辑器,再按一下a键,进入编辑状态,然后输入如下C语言语句:
    
    #include<stdio.h>
    int main() {
     printf("hello world!\n");
    }
    
    到此,按esc键退出编辑状态,再输入一个冒号(shift + 冒号分号那个键),紧跟着输入 wq ,即 输入
    
      :wq
    
     按回车,即推出vim编辑器回到终端命令窗口(类似xp的命令提示符),
    
    之后输入
    
      gcc test.c  ,这步是编译
    
      ./a.out  , 这是执行,将会输出 hello world!
    
    到此结束,前提是你已经安装gcc
    展开全文
  • 在linux下编写简单的c程序

    万次阅读 2018-03-19 11:51:29
    最近开始学习linux编程,对于linux的命令,却还不特别熟悉,此记录一下,学习linux的一些命令首先ctrl+alt+t打开终端,然后使用vim进行编程 vim hello.c hello.c中 按 i 或者 insert 输入以下内容输入完成后...
  • 参考: https://www.cnblogs.com/klb561/p/9021961.html; ... 简单教程: touch hello.c 新建一个hello.c文件 vim hello.c 进入hello.c文件 i 或insert 开始输入编码内容 按esc...
  • 如何在Linux下编程

    2020-07-10 23:11:04
    此实验centos镜像进行 一、确保安装gcc编辑器 二、新建一个.c文本 三、用vi编写一个c程序 四、对刚刚编辑好的程序进行编译
  • C++和C在linux下编程和与WINDOWS有什么区别 [ 标签:c++ 编程,c++
  • 在Linux与Windows下编程的区别,可以总结为以下几点: 1.Linux可以看到源代码,windows不行。 这一点直接导致的结果就是特殊应用的场合可以自行剪裁和定制所需的内核模块,这对于高级系统内核管理优化和驱动程...
  • linux编程之emacs

    万次阅读 2012-04-01 09:33:34
    在linux下编程,有两个编辑器是肯定会听说的,vim和emacs,个人感觉这两个编辑器和IDE比也真是有过之而无不及啊。 我自己先学了emacs,而且用起来很顺手,所以暂时也没学习vim的打算,这里只能说说emacs。 当然...
  • linux下的C语言编程(总结篇)

    万次阅读 多人点赞 2012-02-19 10:38:00
    【 声明:版权所有,欢迎转载,请勿用于商业用途。...  在Linux下面关于C语言的内容其实挺多的。...而我这里所关注的只是linux应用层方面的内容,属于最基础的内容,当然也是最重要的内容。实际上对应于
  • 不能错过的4本Linux好书

    万次阅读 多人点赞 2014-01-03 17:39:54
    2010年大学毕业,在Linux下编程已三年有余了。最近看论坛上不少朋友谈论看过的编程Linux)书籍,我感触良多。回头想想,当初那个一无所知,而且老是爱问白痴问题的自己,都想笑,如今终于入门了。再回头数数,这几...
  • Linux的SOCKET编程详解

    万次阅读 多人点赞 2019-06-27 15:09:46
    Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程...
  • 在Linux系统中搭建Python编程环境

    千次阅读 2018-03-23 13:42:37
    ”安装文本编辑器,以简化Python代码的编写工作第一个python程序检查Python版本当前有两个不同的Python版本:python2和python3,并且python3不向兼容python2你的系统中运行应用程序Terminal(如果你使用的是...
  • Linux下的多进程编程初步(转载)

    万次阅读 多人点赞 2011-10-24 08:57:35
    最近学习linux环境高级编程,多进程编程算是编程中的最重要的一个部分了,本文让我学习和明白了很多,所以转载过来。让更多想多线程编程的人学习。只有顶到首页才能让更多的人学习。 文章摘要:  多线程程序...
  • linux下C++编程学习

    千次阅读 2020-02-29 21:58:40
    前言(废话,可略过):之前一直windows做C++编程,后来换后台工作接触到linux下C++开发。期间磨磨唧唧浪费了很多时间。记录历程,给后来的小伙伴提个醒,免得浪费宝贵时间。 一、关于换系统 如果windows...
  • Linux高级网络编程系列教程

    千次阅读 多人点赞 2018-05-17 11:19:59
    一、网络应用层编程1、Linux网络编程01——网络协议入门2、Linux网络编程02——无连接和面向连接的区别3、Linux网络编程03——字节序和地址转换4、Linux网络编程04——套接字5、Linux网络编程05——C/S与B/S架构的...
  • Linux下简单socket编程

    千次阅读 2019-04-06 21:46:57
    Linux下简单socket编程 socket的英文翻译是接口、插座的意思,很形象,就相当于将两个台电脑用一根线连起来,线的两头分别是插头,插两台电脑上,借此实现通信。 两台电脑通信,实际上是这两台电脑上的某个进程...
  • Linux下Qt编程入门教程

    千次下载 热门讨论 2020-07-30 23:31:01
    本书主要讲述Qt在Linux下编程基础知识 以红旗LINUX4.1桌面版为例qt-x11-free-3.3.2 目录 前 言 第一章 Qt的安装 第二章 Hello World 第三章 C/C++ 基础
  • Linux系统编程中文版.pdf

    热门讨论 2020-07-30 23:32:27
    Linux系统编程中文版.pdf
1 2 3 4 5 ... 20
收藏数 502,930
精华内容 201,172
关键字:

怎么在linux下编程