【ARM 嵌入式 编译系列 3.6 -- 删除lib中的某个文件】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】


文章目录

删除lib中的某个文件

比如,如果要删除 libc.a 静态库中的特定对象文件并重新使用这个静态库,在终端中可以使用 ar 命令。ar 是一个归档工具,它可以创建、修改、提取以及列出归档库文件(如 .a 文件)的内容。

下面是删除 libc.a 中指定对象文件的步骤:

  1. 列出 libc.a 中的所有对象文件,以确认要删除的文件确实存在:
sh 复制代码
ar t libc.a
powershell 复制代码
[02:32:10] (*^~^*) ~/sam/workbase/ra4m2/test$ ar -t libc.a
lib_a-_Exit.o
lib_a-__adjust.o
lib_a-__atexit.o
lib_a-__call_atexit.o
lib_a-__dprintf.o
lib_a-__exp10.o
lib_a-__ten_mu.o
lib_a-a64l.o
lib_a-abort.o
lib_a-abs.o
lib_a-access.o
lib_a-aeabi_atexit.o
lib_a-aeabi_memclr.o
lib_a-aeabi_memcpy-ar
...
  1. 使用 ar 命令从 libc.a 中删除指定的对象文件。你可以一次性删除多个对象文件:
sh 复制代码
ar d libc.a lib_a-closer.o lib_a-fstatr.o lib_a-isattyr.o lib_a-lseekr.o lib_a-readr.o 
  1. 再次列出 libc.a 的内容以确认对象文件已被删除:
sh 复制代码
ar t libc.a 
  1. (可选)如果你想验证删除的对象文件是否会影响程序的链接,你可以尝试重新链接你的程序:
sh 复制代码
gcc -o myprogram myprogram.c -L/path/to/lib -lc 

其中 /path/to/liblibc.a 所在目录的路径。

请注意,删除静态库 libc.a 中的对象文件可能会导致链接时出现未定义的引用错误,因为你可能移除了程序依赖的函数。如果你的程序确实需要这些对象文件中定义的函数,那么链接会失败。在这种情况下,你需要确保这些函数的实现以其他方式提供,或者避免从库中删除这些对象文件。

此外,在修改系统级的 libc.a 静态库之前,建议创建一个备份。这样,如果修改导致问题,你可以恢复原始的静态库。如果不是必要的,通常不建议修改系统级的库,而是应该创建并使用自定义的静态库。

相关推荐
LCMICRO-133108477463 分钟前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-133108477466 分钟前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
2401_827501283 小时前
Linux系统移植
linux·arm开发·单片机
神罚天下ET1 天前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
振南的单片机世界1 天前
高优先级“插队”,低优先级让路:中断嵌套的核心规则
arm开发·stm32·单片机·嵌入式硬件
Dlrb12112 天前
ARM---IMX6ULL 的 PWM 模块介绍及其程序的编写
arm开发·arm·pwm·imx6ull·lcd屏幕
byte轻骑兵2 天前
如何定制BlueZ编译:开启/关闭BLE/音频模块的编译参数配置
linux·arm开发·蓝牙·bluez·电脑蓝牙
亿道电子Emdoor3 天前
【Arm】MSP和PSP的区别简介
c语言·arm开发·单片机·mcu
Lee_jerome4 天前
《C/C++编译全家桶:g++四阶段、.a与.so区别、CMake构建、ARM交叉编译,这篇全讲透了》
c语言·开发语言·arm开发·c++·编译·cmake·cmakelists
Dlrb12114 天前
ARM---IMX6ULL的LCD模块简介及LCD驱动程序的编写
arm开发·lcd·arm·imx6ull·显存·像素