简易的arm-linux库文件移植

<1>动态链接库

1.需要fun.c、 fun.h、 main.c三个文件以及交叉编译器arm-linux-gnueabif-gcc

2.结构为

主目录

|

|--------main.c

|--------src/

| |--------fun.c

|

|--------lib/

| |--------libfun.so

|

|--------inc/

| |--------fun.h

|

3.先编译fun.c生成链接库

bash 复制代码
arm-linux-gnueabif-gcc -fPIC -shared ./lib/fun.c -o libfun.so

-fPIC:生成位置无关的代码,可以在任何内存地址加载

-shared:告诉编译器创建共享库而不是可执行文件(linux/unix 为.so,windows 为.dll)

链接库文件名必须为libxxx.so

  1. 然后编译main.c生成arm可执行文件
bash 复制代码
arm-linux-gnueabif-gcc main.c -lfun -L./lib -I./inc -o a.out

-lfun:链接fun库

-L./lib:在 ./lib 中寻找fun链接库

-I./inc:在 ./inc 中寻找头文件

-o a.out:生成可执行文件名为a.out

5.将libfun.so移到挂载系统中的lib文件夹中

bash 复制代码
cp ./lib/libfun.so ~/nfs/imx6/rootfs/lib

将可执行文件a.out移到挂在系统中的任意位置

bash 复制代码
cp ./a.out ~/nfs/imx6/rootfs/study/fun

6.板子运行a.out即可

<2>静态链接库

1.fun.c main.c的编译不同

bash 复制代码
    gcc -c fun.c -o fun.o
    gcc -c main.c -o main.o

2.创建静态链接库

bash 复制代码
    ar rcs libfun.a fun.o

ar 命令参数说明:

r - 替换或添加文件到库中

c - 创建库(如果不存在)

s - 创建索引

3.链接静态库生成可执行文件

bash 复制代码
 gcc main.o -L./lib -lfun -o a.out

<3>动态和静态差别

1.动态产生的可执行文件比静态产生的可执行文件要小很多。

相关推荐
m0_7436975933 分钟前
DNS的反向域名的相关问题
linux
杨云龙UP43 分钟前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
思想觉悟1 小时前
SEAndroid实战
android·linux·c++
隔窗听雨眠1 小时前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
xiaoyunxuexibiji1 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能
画中有画2 小时前
在自动化脚本中调用其他脚本文件
运维·自动化
前进吧-程序员2 小时前
C++20 协程实战:手写 Task、单线程调度器与 awaiter 的三个钩子
linux
一条破秋裤2 小时前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频