linux 动态库如何裁剪,Linux环境下openssl交叉编译、安装和裁剪

本文介绍了如何在嵌入式平台上交叉编译和裁剪OpenSSL 0.9.8e库。首先,通过配置选项如`no-asm`和`shared`来编译动态链接库,并指定安装路径。接着,修改Makefile以适应mips平台,包括替换编译工具和去除特定参数。完成编译和安装后,通过精简配置选项进一步裁剪库文件大小,以适应资源有限的嵌入式环境。最后,提到了编译前后注意事项,如清理旧文件、正确设置库链接顺序等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的项目需求中依赖libcrypto和libssl库,所以需要编译安装openssl0.9.8e,花了差不多一天的时间终于成功安装和裁剪,现在总结并分享个人的方法,贴出来供大家参考和指正。

方法如下(不同的平台要根据实际环境更改相应的编译工具):

一、配置:

./config no-asmshared--prefix=

说明:no-asm  在交叉编译过程中不使用汇编代码代码加速编译过程。

shared  生成动态链接库。

--prefix      指定生成lib include bin目录的路径,不修改此项则默认为OPENSSLDIR目录。

二、 修改Makefile:

(这些修改也可以在config配置中使用相应参数来更改,具体怎么做请自己查相应资料,我是直接修改Makefile的)

在Makefile中找到相应参数,其后面的内容修改如下:

1、 PLATFORM=(mips) //注意修改此值为你产品硬件平台,如arm、mips等等,我所使用的平台为mips,我使用的是mips平台编译工具。

2、把所有的 –march=pentium 去掉(三处)。

3、指定所使用的编译工具:

CC =  ........./mipsel-linux-uclibc-gcc

PEX_LIBS=

EX_LIBS=  -ldl

EXE_EXT=

ARFLAGS=

AR=  .........../mipsel-linux-uclibc-ar$(ARFLAGS) r

RANLIB=  .........../mipsel-linux-uclibc-ranlib

PERL=  /usr/bin/perl

TAR=  tar

TARFLAGS=  --no-recursion

MAKEDEPPROG=  gcc

说明:

1、此处的mipsel-uclibc-gcc为交叉编译工具,根据实际情况更改为你自己平台下的编译工具即可,比如:arm-linux-gcc。注意AR和RANLIB也要作相应修改。

2、不同平台的编译器编译出来的库文件大小可能不一样。(我要两种平台下编译出来的库文件相差0.5M的大小)。

三、make

四、make install

以上操作成功后会在你指定的目录下生成四个文件夹,在其中的lib目录下可找到所需要的 XXX.so动态库文件。

五、裁剪

在嵌入式平台上,如果使用openssl的标准方法,编译出来的libcrypto.so和libssl.so会比较大,大约为2.1M多和436K,为了节省空间,可以使用如下方法进行裁剪:

1、静态库:

./config--prefix=/home/zqjun/openssl5350no-shared no-zlib no-asm no-threads no-sse2no-compno-dso no-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic

no-hw no-cipherno-md2 no-md4 no-mdc2 no-rc2 no-idea no-camellia no-ec

no-ecdsa no-ecdhno-store no-ripemd no-des no-rc4 no-bf no-cast no-dsa

no-dh no-ssl no-ssl2no-ssl3 no-tls no-perlasm

2、动态库:

.config--prefic=/home/zqjun/openssl5350 shared no-zlib no-asm no-threads no-sse2 no-compno-gmp no-rfc3779

no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipher no-md2 no-md4

no-mdc2no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdh no-store

no-ripemd no-des no-rc4no-bf no-cast no-dsa no-dh no-ssl

no-ssl2 no-ssl3 no-tls no-perlasm

./config linux-elf --prefix=/tmp/openssl shared no-zlib no-asm no-threads no-sse2 no-rfc3779 no-rc5 no-zlib-dynamic no-hw no-md2 no-md4 no-idea no-camellia no-ec no-store no-cast no-dh no-ssl no-ssl3 no-tls

注意:

1、动态编译时不能出现no-dso参数,因为编译过程中有些函数需要链接相应动态库。

2、编译完成后使用XXX-strip把相应的符号去掉,安装后的库会更小一些。

创建出Makefile后,再按照上面编译时的修改方法修改makefile中相应的参数值就可以了。

注意事项:

1、在linux上用make编译或用make install重新安装之前最好先用makeclean清除上一次安装所生成的所有的文件,以免因之前的错误遗留的文件导致编译安装不成功。

2、注意引用库的顺序为:-lssl -lcrypto,如果为-lcrypto –lssl,编译时会出现错误。

3、openssl所涉及到的算法介绍见博客:

### Linux 嵌入式开发教程资源 #### 1. 初步概念与环境搭建 对于Linux嵌入式系统的开发者来说,理解基本的概念技术栈至关重要。这包括但不限于交叉编译工具链、根文件系统构建以及引导加载程序的选择。 - **交叉编译工具链**: 使用宿主机上的工具来生成目标机上运行的可执行代码的过程称为交叉编译。Yocto Project提供了一套完整的解决方案来进行高效的跨平台开发[^3]。 - **根文件系统(RootFS)**: 构建适合特定硬件架构的最小化操作系统镜像非常重要。Buildroot是一个轻量级的方法论框架,它允许定制化的RootFS创建过程变得简单而灵活[^4]. - **Bootloader(启动加载器)**: U-Boot作为最流行的开源bootloader之一,在众多ARM平台上得到了广泛应用支持。学习U-boot配置选项及其命令行接口有助于掌握设备初始化流程[^5]. ```bash # 安装必要的包 (Debian/Ubuntu为例) sudo apt-get install build-essential git-core libncurses-dev bison flex \ openssl libssl-dev dkms libelf-dev # 获取并设置upstream Yocto Poky版本库 git clone https://github.com/openembedded/poky.git cd poky/ source oe-init-build-env ``` #### 2. 实际项目实践指南 参与实际工程项目能够极大地提升技能水平。下面列举了一些有价值的在线课程书籍资料: - **书籍推荐** - *Building Embedded Linux Systems*: 这本书深入探讨了从零开始建立一个完整的嵌入式Linux发行版所需的知识点,涵盖了内核裁剪、驱动移植等方面的内容[^6]. - **视频系列** - YouTube频道如"Robert Nelson's BeagleBoard.org Foundation"提供了大量有关BeagleBone Black其他SBC板卡的实际操作指导视频[^7]. - **官方文档** - ARM Developer网站不仅有详尽的技术白皮书还有针对不同处理器家族的最佳实践案例分享[^8]. #### 3. 社区交流与技术支持 积极参与社区讨论可以获得最新的行业动态技术趋势。加入邮件列表或论坛可以帮助解决遇到的问题,并与其他爱好者共同进步。 - **Linaro Connect Events & Linaro Wiki**: 提供了一个全球性的技术会议日程安排表以及丰富的Wiki页面链接集合,方便查找各类专题讲座录像回放及演讲材料下载[^9]. - **Stack Overflow Tagged Questions**: 当面临具体编码难题时,这里汇聚了大量的历史问答记录可供参考借鉴;同时也可以发布新问题寻求帮助[^10].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值