zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux静态库与动态库的使用

Linux静态 动态 使用
2023-09-27 14:26:28 时间

一、Linux基本操作命令

1、用户切换:普通用户和管理员权限(su)
2、文件的操作
新建:vi、vim或touch
删除:rm
复制:cp、mv
编辑:vi或者vim编辑器、gedit
文件读写权限的修改:chmod
-rm-r-r-- 1 root root
r(4):读;w(2):写;x(1):可执行
3、目录的操作
新建:mkdir
删除:rmdir(删除空文件夹)、rm -r -f
复制:cp -r
切换:cd
4、网络配置
ifconfig eth0(网卡名称) + ip地址
ping :查看主机之间互通的情况
电脑——虚拟机——开发板之间联系
(配ip地址,要求:ip地址在一个网段内,而且ip地址不能有冲突)
5、压缩与解压
tar、gzip
6、交叉编译器
arm-linux-gcc 可以把.c程序编译成可执行程序,下载到开发板(arm架构)运行
开发板(目标机):处理器、存储器受限
电脑(宿主机):处理器处理能力强,存储大
二、静态库的创建与使用
首先创建unsgn_pow.c文件,包含unsgn_pow()函数的定义:

//创建文件
[root@localhost ~]# cd /home
[root@localhost home]# mkdir AiY
[root@localhost home]# cd AiY
[root@localhost AiY]# touch unsgn_pow.c

编写unsgn_pow.c文件的程序:

unsigned long long unsgn_pow(unsigned int x,unsigned int y)
{
	unsigned long long res=1;
	if(y==0)
	{
		res=1;
	}
	else if(y==1)
	{
		res=x;
	}
	else
	{
		res=x*unsgn_pow(x,y-1);
	}
	return res;
}

然后创建pow_test.c文件,同unsgn_pow.c创建文件的步骤一样
编写pow_test.c文件:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
	unsigned int x,y;
	unsigned long long res;
	if((argc<3)||(sscanf(argv[1],"%u",&x)!=1)||(sscanf(argv[2],"%u",&y)!=1))
	{
		printf("Usage:pow base exponent\n");
		exit(1);
	}
	res=unsgn_pow(x,y);
	printf("%u ^ %u = %u\n",x,y,res);
	exit(0);
}

接下来创建静态库
不过前提是先安装 gcc 编译器

//运行如下两行,安装完毕即可
yum -y install gcc gcc-c++ out autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim 

使用归档工具ar将一些目标文件集中在一起

gcc -c unsgn_pow.c
ar rcsv libpow.a unsgn_pow.o

下面编译主程序,将会链接到刚生成的静态库libpow.a

gcc -o pow_test pow_test.c -L. -lpow
./pow_test 2 10

运行结果

2 ^ 10 = 1024

三、动态库的创建与使用

首先使用gcc的-fPIC选项为动态库构造一个目标文件

gcc -fPIC -Wall -c unsgn_pow.c

接下来,使用-shared选项和已创建的位置无关目标代码,生成一个动态库libpow.so

gcc -shared -o libpow.so unsgn_pow.o

编译主程序,链接刚生成的动态库

gcc -o pow_test pow_test.c -L. -lpow

最后运行程序,不过在运行程序之前,需要注册动态库,执行如下命令即可

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/cluster/.share/lib
source /etc/profile

最后切换到创建库的那个文件夹

cd /home/AiY
./pow_test 2 10

运行结果

2 ^ 10 = 1024