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


相关文章
|
20天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
21天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
1天前
|
存储 Linux 编译器
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
|
1天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
4天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
19 2
|
4天前
|
存储 Linux 编译器
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
11 0
|
4天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
21 5
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
14 3
|
6天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
16天前
|
Linux 编译器 vr&ar
【库函数】Linux下动态库.so和静态库.a的生成和使用
【库函数】Linux下动态库.so和静态库.a的生成和使用
11 1