• 使用gcc和make调式程序.


    一:linux系统下的交叉编译基础。

    二:安装GCC:

    (1):GCC的概述:GCC原名GNU C语言编译器,后扩展至又可以处理c++,Fortran,Pascal,Java,以及Ada与其他语言.

    [root@server1 dengzhaoxu]# rpm -qa|grep gcc    //显示以下信息表示已经安装.
    gcc-4.8.5-36.el7.x86_64
    gcc-gfortran-4.8.5-36.el7.x86_64
    libgcc-4.8.5-36.el7.x86_64
    gcc-c++-4.8.5-36.el7.x86_64
    [root@server1 dengzhaoxu]# 

    (2):安装GCC:

    1:镜像文件:

    2:挂载光盘到 iso:

    3:制作用于安装的yum源文件.

    [root@server1 dengzhaoxu]# mkdir /iso //创建镜像文件
    mkdir: 无法创建目录"/iso": 文件已存在
    [root@server1 dengzhaoxu]# mount /dev/cdrom /iso //挂载光盘到iso下.注意/iso与前方须有空格.
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@server1 dengzhaoxu]# cat /etc/yum.repos.d/dvd.repo  //这里是查看步骤3:可以使用vim来创建该安装yum源文件.
    #/etc/yum.repos.d/dvd.repo
    #or for ONLY the media repo,do this:
    #yum --disablerepo=* --enablerepo=c6-media [command]
    [dvd]
    name=dvd
    baseurl=file:///iso
    gpgcheck=0
    enabled=2
    [root@server1 dengzhaoxu]#

    [root@server1 dengzhaoxu]# yum info gcc  //查看相关信息
    已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    Repository 'dvd': Error parsing config: Error parsing "enabled = '2'": invalid boolean value
    Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
    已安装的软件包
    名称    :gcc
    架构    :x86_64
    版本    :4.8.5
    发布    :36.el7
    大小    :37 M
    源    :installed
    来自源:anaconda
    简介    : Various compilers (C, C++, Objective-C, Java, ...)
    网址    :http://gcc.gnu.org
    协议    : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and
             : LGPLv2+ and BSD
    描述    : The gcc package contains the GNU Compiler Collection version 4.8.
             : You'll need this package in order to compile C code.

    [root@server1 dengzhaoxu]# yum clean all //安装前须先要清除
    #yum install gcc -y //安装.

    (三):使用GCC:

    [root@server1 dengzhaoxu]# vim hello.c //编写c语言程序.(源文件)
    [root@server1 dengzhaoxu]# gcc hello.c //编译
    [root@server1 dengzhaoxu]# ll hello.c a.out
    -rwxr-xr-x. 1 root root 8552 4月  13 22:14 a.out //编译后生成的可执行文件
    -rw-r--r--. 1 root root  135 4月  13 22:14 hello.c
    [root@server1 dengzhaoxu]# ./a.out //运行该文件.
    hello linux
    等赵顼
    [root@server1 dengzhaoxu]# ./a.out
    hello linux
    d
    [root@server1 dengzhaoxu]# vim hello.c //修改
    [root@server1 dengzhaoxu]# gcc -c hello.c //方式2编译
    [root@server1 dengzhaoxu]# ll hello*
    -rw-r--r--. 1 root root  148 4月  13 22:16 hello.c
    -rw-r--r--. 1 root root 1736 4月  13 22:17 hello.o  //
    [root@server1 dengzhaoxu]# gcc -o hello hello.o
    [root@server1 dengzhaoxu]# ll hello*
    -rwxr-xr-x. 1 root root 8552 4月  13 22:18 hello  //经过多步才生成与源文件同名的可执行文件.
    -rw-r--r--. 1 root root  148 4月  13 22:16 hello.c
    -rw-r--r--. 1 root root 1736 4月  13 22:17 hello.o
    [root@server1 dengzhaoxu]# ./hello
    hello linux
    dengzhaoxu
    你输入了:[root@server1 dengzhaoxu]# 

    2:主程序,子程序链接,子程序的编译。即在一个程序中调用另一个程序.

    [root@server1 dengzhaoxu]# vim first1.c
    [root@server1 dengzhaoxu]# vim first2.c
    [root@server1 dengzhaoxu]# gcc -c first1.c first2.c
    [root@server1 dengzhaoxu]# ll thanks*
    ls: 无法访问thanks*: 没有那个文件或目录
    [root@server1 dengzhaoxu]# ll first1*
    -rw-r--r--. 1 root root  106 4月  13 22:36 first1.c
    -rw-r--r--. 1 root root 1600 4月  13 22:40 first1.o
    [root@server1 dengzhaoxu]# ll first2*
    -rw-r--r--. 1 root root  118 4月  13 22:39 first2.c
    -rw-r--r--. 1 root root 1640 4月  13 22:40 first2.o
    [root@server1 dengzhaoxu]# gcc -o first first1.o first2.o
    [root@server1 dengzhaoxu]# ll first*
    -rwxr-xr-x. 1 root root 8560 4月  13 22:42 first  //可执行文件
    -rw-r--r--. 1 root root  106 4月  13 22:36 first1.c
    -rw-r--r--. 1 root root 1600 4月  13 22:40 first1.o
    -rw-r--r--. 1 root root  118 4月  13 22:39 first2.c
    -rw-r--r--. 1 root root 1640 4月  13 22:40 first2.o
    [root@server1 dengzhaoxu]# ./first
    在主程序中调用子程序中的函数
    执行函数first2
    注意函数的的声明在主程序[root@server1 dengzhaoxu]# 
    //可以与上面的进行对照.
    [root@server1 dengzhaoxu]# gcc -Wall -c first1.c first2.c  // -Wall产生详细的编译过程信息.
    first1.c: 在函数‘main’中:
    first1.c:5:2: 警告:隐式声明函数‘first2’ [-Wimplicit-function-declaration]
      first2();
      ^
    first1.c:6:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
     }
     ^

     (4):了解makefile的基本语法与变量;

  • 相关阅读:
    bzoj 2730: [HNOI2012]矿场搭建
    bzoj 1179: [Apio2009]Atm
    strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
    C语言printf的格式
    C语言中交换两个数值的方法
    C语言中 指针的基础知识总结, 指针数组的理解
    自定义方法实现strcpy,strlen, strcat, strcmp函数,了解及实现原理
    选择排序
    冒泡排序的优化
    storyBoard中取消键盘第一响应
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12694735.html
Copyright © 2020-2023  润新知