文章目录
一、组装可执行程序
1.用gcc生成静态库和动态库
准备生成例子文件hello.h、hello.c和main.c创建一个作业目录,保存文件
mkdir test1;
cd test1
vim hello.h
vim hello.c
vim main.c
使用gcc命令将hello.c文件编译成.o文件,并用ls命令查看是否生成文件
gcc -c hello.c
ls
由.o文件创建静态库
# ar -crv libmyhello.a hello.o
在程序中使用静态库
# 方法一
gcc -o hello main.c -L. -lmyhello
# 方法二
gcc main.c libmyhello.a -o hello
# 方法二
gcc -o main.c # 先生成 main.o
gcc -o hello main.o libmyhello.a
然后执行程序删除libmyhello.a,程序照常运行说明程序不依赖动态文件接下来创建动态库
创建.so动态库文件
gcc -shared -fPIC -o libmyPractice.so Practice.o
使用动态库
gcc -shared -fPIC -o libmyPractice.so Practice.o
2.在程序中使用静态库
嵌入式第1,2周作业基础文件再创建一个test2.c文件并修改mian1.c文件
mian1.c文件
#include<stdio.h>
#include"sub1.c" //用于调用sub1.c文件
#include"test2.c"//用于调用test2.c文件
void main()
{
int a=8,b=6; //设置两个整型变量并赋值
float c; //设置一个单精度变量用于x2x函数的返回值
float d;
c=x2x(a,b);
d=x2y(a,b);
printf("%f\n",c); //输出x2x的返回结果
printf("%f\n",d); //输出x2y的返回结果
}
test.c文件
#include<stdio.h>
float x2y (int a,int b)
{
float d;
d=a+b;
return d;
}
使用gcc命令编译文件然后使用gcc进行链接
运行main文件再用ls查看
3.在程序中使用动态库
1.用ar工具生成1个 .so 动态库文件
ar -crv libmy2xy.so sub1.o test2.o
将main1.c、main2.c目标文件用 ar工具生成1个 .so 动态库文件, 然后用 gcc将 main函数的目标文件与此动态库文件进行链接,生成最终的可执行程序
二、gcc编译工具集中各软件的用途
1.Linux GCC常用命令
#include <stdio.h>
int main()
{
printf("My name is wudi\n");
return 0;
}
用gcc编译
gcc -E main.c -o main.i //预处理
gcc -S main.i -o main.s //转为汇编代码
gcc -c main.s -o main.o //汇编
gcc main.o -o main //链接生成可执行文件
2.安装nasm并用其编译成可执行程序
安装nasm
1.nasm的安装在网站上下载nasm压缩包将压缩包复制到虚拟机解压安装包tar -xvf nasm-2.14.02.tar.gz进入刚刚解压的安装包的目录cd nasm-2.14.02执行命令:./configuremakesudo make install
这样就安装完成了。
再编译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 ; 调用内核功能
三、Linux背后的代码库
1.了解Linux 系统中终端程序最常用的光标库(curses)的主要函数功能
1.getstr();输入一串字符串;
2.refresh();我们写入的内容首先会在系统缓冲区中,经过refresh()函数刷新之后才能够显示到屏幕上;
3.scanw("%s",s);;按指定格式输入内容,类似于scanf();
4.mvaddstr();移动到某个位置输入…
5.move(y,x);将光标移动至(x,y)处;
6.echo()和noecho();输入的字符显示和不显示在终端上;
7.getch();输入一个字符;
1.Linux下curses函数库的学习
2. 在windows10中游客身份体验即将绝迹的远古时代的 BBS
在 win10 系统中,“控制面板”–>“程序”—>“启用或关闭Windows功能”,启用 “telnet client” 。 然后打开一个cmd命令行窗口,命令行输入 telnet bbs.newsmth.net,以游客身份体验一下即将绝迹的远古时代的 BBS。
3.在Ubuntu中用 sudo apt-get install libncurses5-dev 安装curses库
输入指令:
sudo apt-get install libncurses5-dev
,敲击回车键
输入查找指令:
头文件:
whereis curses.h
库文件:
whereis curses.*