本文讲述了一个简单的例子 ,很好的解释了“编译动态库”。
一、准备工作
1.使用oracle VM Virtualbox软件安装Ubuntu虚拟机
2.下载好相关的软件并传输到虚拟机下,安装好交叉编译器。
二、编译应用
该例子以 1.c , 2.c, 2.h组成
1. 代码编辑
下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:2.h,一个.c文件:2.c,我们将这个文件编译成一个动态库:libtest2.so。
在Linux下编辑代码,可以使用vi,也可以使用gedit;
使用degit编辑"2.c, 2.h"如下图所示
然后我们用交叉编译器命令 :(用交叉编译是为了让生成的libtest.so能在arm上运行)
arm-none-linux-gnueabi-gcc 2.c -fPIC -shared -o libtest2.so编译使生成libtest2.so如下图所示
说明: -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),
不用该标志外部程序无法连接。相当于一个可执行文件
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
-------------------------------------------
三、运行实例
用U盘、SD卡或者网络TFTP将libtest2.so和test复制到开发板上,可以参考《将可执行程序下载到板子上运行的不同方法》文档
执行 ./test后,我们发现出现了问题 如下图
我们用ldd test来查看其可依赖文件 下图发现libtest2.so的路径不对
用命令env查看
得知应该把libtest2.so放到/usr/lib下
在用ldd查看发现没问题,然后执行./test即可如下图
关键字:arm-Linux 编译 动态库
引用地址:
arm-Linux 编译动态库 简单实例
推荐阅读最新更新时间:2024-11-09 10:41
GCC编译器原理(三)------编译原理三:编译过程(2-1)---编译之词法分析
二、编译 编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件,这个过程是整个程序构建的核心部分,也是最复杂的部分之一。 现在版本的 GCC 把预编译和编译两个步骤合并成一个步骤,使用 cc1 的程序来完成这两个步骤。 编译过程一般分为 6 个步骤:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化,过程如下图: 2.1 词法分析 源代码程序被输入到扫描器(Scanner),扫描器对源代码进行简单的词法分析,运用类似于有限状态机(Finite State Machine)的算法可以很轻松的将源代码字符序列分割成一系列的记号(Token)。 词法分析产生的记号一般可以分为如下
[单片机]
W806的编译环境准备
# 一、资料软件准备工作 ### 1.1 硬件准备 W806开发板、USB转串口线 ### 1.2 软件准备 1. Windows端的编译软件:CDK 链接:https://pan.baidu.com/s/1mslRbcuC0oGrNsjQJY3wHQ 提取码:qdut 2. 烧录工具:W800 Upgrade Tools.exe (http://www.winnermicro.com) 3. 工程文件:SDK (http://www.winnermicro.com) $textcolor{red}{注意:S
[单片机]
* JLink Info: Could not measure total IR len. TDO is constant high.
keil编译Jlink烧写时提示* JLink Info: Could not measure total IR len. TDO is constant high.。无法烧写成功。。我的问题是是Jlink方式烧写时电压太低,检测不到。把Jlink烧写方式换成SW烧写。就OK了
[单片机]
[ESP32][esp-idf][LVGL7.9] 使用oled iic编译失败
编译失败如图: 这是官方失误导致的,修改如下,删除LV字符 看下正确cfg配置:
[单片机]
51单片机制作脉冲发生器
要求 1.在Keil IDE(u Vision2)中完成应用程序设计,并编译 2.在ISIS 7 Professional 中完成电路设计、调试与仿真 /** I use a timer in my code to control the time **/ #include reg51.h #define uint unsigned int #define uchar unsigned char uchar code tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar second=0,counter=0,second_1=0,second
[单片机]
uboot 学习 Makefile分析
U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。 U-BOOT的下载地址: http://sourceforge.net/projects/u-boot 我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败。1.1.6是没问题的。 u-boot源码结构 解压就可以得到全部u-boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分为3类。 第1类目录与处理器体系结构或者开发板硬件直接相关; 第2类目录是一些通用的函数或者驱动程序; 第3类目录是
[单片机]
OK6410A 开发板 (三) 6 u-boot-2021.01 boot 解析 SPL与u-boot 编译链接部分的不同
include/generated/asm-offsets.h 和 include/generated/generic-asm-offsets.h 的生成(以include/generated/asm-offsets.h为例) SPL多 -Ispl/include -Ispl/. -DCONFIG_SPL_BUILD -ffunction-sections -fdata-sections U-boot多 -mword-relocations -fno-pic arch/arm/cpu/arm1176/start.S SPL 多 -Ispl/include -DCONFIG_SPL_BUILD U-boot 多 -m
[单片机]