编译动态库到目标设备运行(之前忽略uclibc版本与glibc区别)导致一直找不到可执行文件

在这里插入图片描述

1、编译对象文件:

mips-linux-gnu-gcc -c noise_suppression.c -muclibc -fPIC

2、生成共享库:

mips-linux-gnu-gcc -shared -o libnoise_suppression.so noise_suppression.o -muclibc -lm

3、检查生成的动态库

file libnoise_suppression.so

分析输出信息

libnoise_suppression.so: ELF 32-bit LSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, not stripped

1. ELF 32-bit LSB shared object
ELF: 这是“Executable and Linkable Format”的缩写,表示文件是以ELF格式存储的。这是Unix和类Unix系统(包括Linux)常用的可执行文件格式。ELF文件可以是可执行文件、目标代码、共享库(动态链接库)等。

32-bit: 表示该共享库是32位的,这意味着它是为32位架构编译的。32位程序使用32位地址空间和数据宽度。

LSB: 表示“Least Significant Byte first”,即该文件使用小端字节序(Little Endian)。在小端字节序中,较低有效字节在较小的地址处。MIPS架构可以配置为小端或大端模式,小端在某些嵌入式系统中较常见。

shared object: 表示该文件是一个共享库(动态链接库),可以在运行时被多个程序加载和使用。共享库提供了一种节省内存和磁盘空间的方法,因为多个程序可以共享相同的库代码。

2. MIPS
MIPS: 表示该共享库是为MIPS架构编译的。MIPS是一种RISC(精简指令集计算)架构,广泛用于嵌入式系统、路由器和某些专用设备。
3. MIPS32 rel2 version 1
MIPS32: 指定了该库是为MIPS 32位架构编译的。MIPS32是MIPS架构的32位版本,提供32位的地址空间和寄存器。

rel2 version 1: 表示使用了MIPS32的“release 2”版本的指令集。这通常意味着该库利用了MIPS32 r2中引入的某些优化或新功能。release 2在release 1的基础上可能添加了更多的指令集扩展和特性。

4. SYSV
SYSV: 指定该共享库的ABI(应用二进制接口)遵循System V标准。这是Unix系统中常用的ABI标准,定义了函数调用、系统调用、错误处理和其他运行时行为的标准方式。
5. dynamically linked
dynamically linked: 表示该库是动态链接的,即在程序运行时加载和解析符号。动态链接的好处是可以在不重新编译程序的情况下更新库,并且多个程序可以共享同一个动态库实例以节省内存。
6. not stripped
not stripped: 表示该共享库中仍然包含调试信息和符号表。这对开发和调试非常有用,但可能会使库文件变得更大。通常,在发布软件时,会使用 strip 工具去掉这些调试信息以减小文件大小。
总结
该输出信息表明你已经成功生成了一个32位小端格式的MIPS共享库。此库使用MIPS32 r2指令集,是动态链接的,并且包含完整的调试信息。这在嵌入式开发中非常常见,特别是对于MIPS架构的设备。

如果你计划发布该共享库,可以考虑使用 strip 工具来移除符号信息以减小文件大小:

mips-linux-gnu-strip libnoise_suppression.so

这将移除调试符号,使文件更小,但要注意这样做可能会影响调试能力。

其他注意事项

fPIC 和性能:在某些平台上,使用 -fPIC 编译代码可能会稍微影响性能,因为它增加了一些间接寻址。然而,这通常是生成共享库所必需的,尤其是对动态链接库。

uClibc 兼容性:继续确保工具链和目标环境的库配置正确,以避免不必要的兼容性问题。

多文件项目:如果项目中有多个源文件,每个文件都需要使用 -fPIC 选项编译。

调试:如果在生成共享库后仍然出现其他问题,考虑使用调试器和编译器选项(如 -g)来检查代码。

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值