Linux静态库与动态库的使用

简介: Linux静态库与动态库的使用

一、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


目录
打赏
0
2
2
1
63
分享
相关文章
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
1188 141
|
5月前
|
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
160 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?
【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
Linux之缓冲区与C库IO函数简单模拟
通过上述编程实例,可以对Linux系统中缓冲区和C库IO函数如何提高文件读写效率有了一个基本的了解。开发者需要根据应用程序的具体需求来选择合适的IO策略。
57 0
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
264 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
【Linux】静态库和动态库
本文详细介绍了Linux系统中静态库和动态库的概念、区别、制作与使用方法,包括它们在链接时的区别、加载机制以及优缺点。
114 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等