arm-Linux 编译动态库 简单实例

发布者:chang_ri最新更新时间:2022-06-06 来源: eefocus关键字:arm-Linux  编译  动态库 手机看文章 扫描二维码
随时随地手机看文章

本文讲述了一个简单的例子 ,很好的解释了“编译动态库”。 

一、准备工作 
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:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 

-------------------------------------------



下面我们通过一个程序来调用这个库里的函数。程序的源文件为:"1.c"。使用degit编辑 如下图 
                         
    
               之后我们再使用命令arm-none-linux-gnueabi-gcc 1.c -ltest2 -L. -o test 生成test文件 如下图所示 
                  
 
说明: -L.:表示要连接的库在当前目录中 
       -ltest2:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称 

        生成libtest2.so和test之后 可以用file命令查看其文件类型 如下图 
             
    




三、运行实例 

用U盘、SD卡或者网络TFTP将libtest2.so和test复制到开发板上,可以参考《将可执行程序下载到板子上运行的不同方法》文档 

执行 ./test后,我们发现出现了问题 如下图 
                
  

 我们用ldd test来查看其可依赖文件 下图发现libtest2.so的路径不对
               
 

用命令env查看   
     

得知应该把libtest2.so放到/usr/lib下 

在用ldd查看发现没问题,然后执行./test即可如下图
                  


关键字:arm-Linux  编译  动态库 引用地址:arm-Linux 编译动态库 简单实例

上一篇:从零开始at91sam9263的linux编程----内核编译
下一篇:移植2.6.30.4到MINI2440

推荐阅读最新更新时间:2024-11-09 10:41

GCC编译器原理(三)------编译原理三:编译过程(2-1)---编译之词法分析
二、编译 编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件,这个过程是整个程序构建的核心部分,也是最复杂的部分之一。 现在版本的 GCC 把预编译和编译两个步骤合并成一个步骤,使用 cc1 的程序来完成这两个步骤。 编译过程一般分为 6 个步骤:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化,过程如下图: 2.1 词法分析 源代码程序被输入到扫描器(Scanner),扫描器对源代码进行简单的词法分析,运用类似于有限状态机(Finite State Machine)的算法可以很轻松的将源代码字符序列分割成一系列的记号(Token)。 词法分析产生的记号一般可以分为如下
[单片机]
GCC<font color='red'>编译</font>器原理(三)------<font color='red'>编译</font>原理三:<font color='red'>编译</font>过程(2-1)---<font color='red'>编译</font>之词法分析
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了
[单片机]
* JLink Info: Could not measure total IR len. TDO is constant high.
[ESP32][esp-idf][LVGL7.9] 使用oled iic编译失败
编译失败如图: 这是官方失误导致的,修改如下,删除LV字符 看下正确cfg配置:
[单片机]
[ESP32][esp-idf][LVGL7.9] 使用oled iic<font color='red'>编译</font>失败
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
[单片机]
51单片机制作脉冲发生器
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
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved