• Linux C语言编程基础


    Linux C语言编程

    任务要求

    1. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分)
    2. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)
    3. 建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include,bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)
    4. 进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)
    5. 进行静态库,动态库制作和调用练习,提交相关截图(5分)
    6. 进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)
    7. 编写makefile(5分)

    程序编写

    • 我选择2.10,在OpenEuler中进行了链表相关C程序的编程练习

    "type.h"

        #ifndef __TYPE_H__
        #define __TYPE_H__
    
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
    
        #define N 10
        typedef struct node{
          struct node *next;
          int id;
          char name[64];
        }NODE;
      
        #endif
    

    practice.c 创建并打印一个链表

    #include "type.h"
    
    NODE *mylist, node[N];
    
    static int printlist(NODE *p)
    {
      while(p){
        printf("[%s %d]->",p->name,p->id);
        p=p->next;
      }
      printf("NULL
    ");
    }
    
    static int main()
    {
      int i;
      NODE *p;
      for(i=0;i<N;i++){
        p = &node[i];
        sprintf(p->name,"%s%d","node",i);
        p->id=i;
        p->next=p+1;
      }
      node[N-1].next = 0;
      mylist = &node[0];
      printlist(mylist);
    }
    

    项目目录

    • 项目名称 20191302project

    gcc相关练习

    • 生成文件

    静态库与动态库制作

    • 静态库制作
      gcc src/practice.c -Iincluede -Llibs -lpractice -o bin/practice
    • 动态库制作
        gcc -shared -o libpractice.so libs/practice.o
    
    • libs目录

    gdb相关练习

    • 断点设置
      • b 函数名 设置函数断点
      • b 行数 设置行断点
      • b 行数 if i==2 设置条件断点
      • tb 函数 设置临时断点
    • 调试
      • r 运行
      • s 单步运行
      • n 单步运行 跳过函数内断点

    makefile编写

    OBJ:libs/libpractice.so libs/libpractice.a bin/practice
      
    bin/practice: libs/practice.o src/practice.c
            gcc src/practice.c -Iinclude libs/practice.o -o bin/practice
    libs/libpractice.a: libs/*.o
            ar rcs libs/libpractice.a libs/*.o
    libs/libpractice.so: libs/*.o
            gcc -shared -o libs/libpractice.so libs/*.o
    

    问题与解决

    • 在运行时,出现了下图所示的报错问题:
    • 解决通过课上所学结合网上查找,得知问题出在重复编译了函数,解决方法是在函数前加上static变为静态全局变量,问题得到解决。
  • 相关阅读:
    IIS服务器禁止某个IP或IP地址范围访问网站的方法
    删除IIS日志
    Win10关闭自动播放
    风云 我的闪存
    必买:一至五千价位段 4K高分辨率显示器购买推荐
    燃油车中新势力!荣威全新第三代RX5开启预售:12万起
    牙膏厂12代U的参数表
    该怎么选轻薄本看这篇就够了!2022年上半年9款最值得购买的轻薄本推荐
    wpf 透明 UIElement.Opacity Property
    SQL Server 2012 copy database without data
  • 原文地址:https://www.cnblogs.com/dongjiashuai/p/15332783.html
Copyright © 2020-2023  润新知