gcc的各项用途
用 gcc将 main函数的目标文件与动(静)态库文件进行链接
1.建立各文件
打开ubuntu18.04终端,使用nano(vim,gedit)等文本编辑器生成所需的文件(最好是在自己创建的文件夹下进行,创建文件夹 mkdir ***** 进行操作,之后用cd进入创建的文件)
之后便可以在指定文件夹下看到生成的几个文件
各文件的具体代码如下
A1.c:
#include <stdio.h>
void x2x(int arg){
printf("A1 print arg:%d\n",arg);
}
A2.c:
#include <stdio.h>
void x2y(char *arg){
printf("A2 printf arg:%s\n", arg);
}
A.h:
#ifndef A_H
#define A_H
void x2x(int);
void x2y(char *);
#endif
test.c:
#include <stdlib.h>
#include "A.h"
int main(){
x2x(1);
x2y("test");
exit(0);
}
2.通过静态库链接目标文件
首先生成A1.c和A2.c 的.o文件
gcc -c A1.c A2.c
可通过输入ls查看生成的文件
可以看到生成A1.o和A2.o文件,之后使用这两个.o文件建立静态库
ar crv libafile.a A1.o A2.o
之后使用.a库文件创建可执行文件,并执行
gcc -o test test.c libafile.a
./test
链接成功
并观察静态链接生成的可执行文件大小为
3.通过动态库链接目标文件
开始前删除执行静态库链接时生成的文件,仅保留最先创建的四个文件
rm A1.o A2.o test libafile.a
生成A1.c A2.c的.o文件
gcc -c A1.c A2.c
由.o文件创建动态库
gcc -shared -fPIC -o libafile.so A1.o A2.o
使用.so文件生成可执行文件test,并执行test
gcc -o test test.c libafile.so
./test
这里发现出错了,这是因为可执行文件test找不到.so文件在哪,linux 自身系统设定的相应的设置的原因,即其只在/lib and /usr/lib 下搜索对应 的.so 文件,故需将对应 so 文件拷贝到对应路径。执行如下代码
sudo mv libafile.so /usr/lib
完成之后再执行一遍./test就可以了
至此动态库链接完成
记录生成的可执行文件test的大小为
使用nasm编译生成可执行程序并对比C代码的编译生成的程序大小。
配置环境
在ubuntu18.04下打开终端,使用下列代码获取nasm
sudo apt-get install nasm
使用nasm创建可执行helloworld文件
hello.asm中的代码为
section .data
hello: db 'Hello world!',10
helloLen: equ $-hello
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,helloLen
int 80h
mov eax,1
mov ebx,0
int 80h
生成.o文件并用.o文件生成可执行文件hello并执行
可以看到我在执行nasm -f elf64 hello.asm生成.o文件时出现一个警告,网上查找了一下原因为nasm知道我在创建了一个标签,但我在标签内没有冒号,在执行时就会警告我。但因为没有遇到错误,我就跳过这个警告了。
记录由nasm编译的可执行文件大小为
使用c代码编译可执行helloworld文件
创建hello.c文件并写一个简单的helloworld输出代码
代码为:
#include<stdio.h>
int main(void){
printf("hello world\n");
return 0;
}
用c代码编译的可执行文件hello大小为
第三方库函数完成代码设计
Linux 系统中终端程序最常用的光标库(curses)的主要函数功能
1、move(y,x);将光标移动至(x,y)处。
2、refresh();我们写入的内容首先会在系统缓冲区中,经过refresh()函数刷新之后才能够显示到屏幕上。
3、echo()和noecho();输入的字符显示和不显示在终端上。可以用密码输入。
4、输出:
addch();显示一个字符
addstr();显示一串字符串
printw(“格式”,变量);显示指定格式的内容,类似于printf();
mvaddstr();移动到某个位置输出。
以游客身份体验一下即将绝迹的远古时代的 BBS
在win10系统中,控制面板–>程序–>启用或关闭Windows功能,启用 “tel