一、静态库.a与.so库文件的生成与使用
静态库的生成
1.创建一个文件 ,并该文件夹中创建三个子程序 hello.h、hello.c 和 main.c
用gcc 将hello.c编译成hello.o文件
由hello.o创建静态库
静态库的使用

动态库的生成
动态库的使用

由图可见,若直接./hello会出现报错,先将文件 libmyhello.so 移动到目录/usr/lib 中就可以解决
二、文件大小的对比
1.编译器背后
新建文件t2,并依次建立子程序s1.h
#ifndef SUB1_H
#define SUB1_H
float x2x(int a, int b);
#endif //SUB1_H
s1.c
#include"sub1.h"
float x2x(int a, int b){
return a + b; //相加
}
s2.h
#ifndef SUB2_H
#define SUB2_H
float x2y(int a, int b);
#endif //SUB2_H
s2.c
#include"sub2.h"
float x2y(int a, int b){
return a * b; //相乘
}
main.c
#include<stdio.h>
#include"sub1.h"
#include"sub2.h"
int main(){
int a = 2, b = 3;
printf("%d + %d = %f\n", a, b, x2x(a, b));
printf("%d × %d = %f\n", a, b, x2y(a, b));
return 0;
}

用静态库文件进行链接,生成可执行文件
.o文件创建静态库

程序中使用静态库

用动态库文件进行链接,生成可执行文件
两个可执行文件大小的比较
gcc的编译过程
创建一个新文件t3,和子程序hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World! \n");
return 0;
}
1.预编译

2.编译

3.汇编

4.链接

2.在ubuntu中下载安装nasm,对示例汇编代码“hello.asm”编译生成可执行程序,并与上述用C代码的编译生成的可执行程序大小进行对比
输入 sudo apt install nasm

新建文件t4,编译汇编语言hello.asm
; hello.asm
section .data ; 数据段声明
msg db "Hello, world!", 0xA ; 要输出的字符串
len equ $ - msg ; 字串长度
section .text ; 代码段声明
global _start ; 指定入口函数
_start: ; 在屏幕上显示一个字符串
mov edx, len ; 参数三:字符串长度
mov ecx, msg ; 参数二:要显示的字符串
mov ebx, 1 ; 参数一:文件描述符(stdout)
mov eax, 4 ; 系统调用号(sys_write)
int 0x80 ; 调用内核功能
; 退出程序
mov ebx, 0 ; 参数一:退出代码
mov eax, 1 ; 系统调用号(sys_exit)
int 0x80 ; 调用内核功能
编译汇编
汇编与C编译大小比较
三、每一个程序背后都站着一堆优秀的代码库。了解实际程序是如何借助第三方库函数完成代码设计
A.Linux 系统中终端程序最常用的光标库(curses)的主要函数功能
1、move(y,x);将光标移动至(x,y)处。
2、refresh();我们写入的内容首先会在系统缓冲区中,经过refresh()函数刷新之后才能够显示到屏幕上。
3、echo()和noecho();输入的字符显示和不显示在终端上。可以用密码输入。
4、输出:
addch();显示一个字符
addstr();显示一串字符串
printw(“格式”,变量);显示指定格式的内容,类似于printf();
mvaddstr();移动到某个位置输出。
5、输入:
getch();输入一个字符
getstr();输入一串字符串
scanw("%s",s);;按指定格式输入内容,类似于scanf();
mvaddstr();移动到某个位置输入。
B.在 win10 系统中,“控制面板”–>“程序”—>“启用或关闭Windows功能”
启用 “telnet client” 和"适用于Linux的Windows子系统"(后面会使用)。 然后打开一个cmd命令行窗口,命令行输入 telnet bbs.newsmth.net,以游客身份体验一下即将绝迹的远古时代的 BBS (一个用键盘光标控制的终端程序)。

打开一个 cmd命令行窗口,输入如下命令:
telnet bbs.newsmth.net
以游客身份体验一下即将绝迹的远古时代的 BBS

C.在Ubuntu中用 sudo apt-get install libncurses5-dev 安装curses库;
D.Linux 环境下C语言编译实现贪吃蛇游戏.点击这里获取代码
新建一个snake.c文件,填入代码
编译并执行

运行效果

参考:
https://blog.youkuaiyun.com/xwmrqqq/article/details/109071198
本文详细介绍了在Linux环境中如何生成和使用静态库与动态库,包括创建过程、链接方式及文件大小对比等内容。此外还介绍了如何利用nasm编译汇编语言程序,并将其与C语言编写的程序大小进行了比较。
6475

被折叠的 条评论
为什么被折叠?



