如何使用 arm-none-eabi-gcc 为 ARM 项目创建和 link 静态库?

How to create and link a static library for an ARM project using arm-none-eabi-gcc?

我想从 mylib.c/.h 和 link 创建一个静态库 libmylib.a 到一个项目,以便使用 arm-[=26 在引导加载程序代码中使用这个库=]-eabi-gcc 交叉编译器 ubuntu 20.04 LTS.

我有电子工程背景,所以我是这个编译器和 linker 东西的新手。

我所知道的: 我一直在搜索这个,发现'.a'只是打包的'.o'文件,仅此而已。您可以使用 linux 中的 ar 来完成。例如,我不知道如何管理这个“.a”文件的依赖关系,或者如何 link 它到项目中。

我想知道的: 我真的很想了解它是如何工作的,使用 arm-none-eabi-gcc 交叉编译器使用这些静态库编译和生成 bin、elf 或 hex 文件(为 linux 找到一些) ), 但我不知道如何正确地搜索它,如何以线性方式学习它。如果你们能帮助我,我将不胜感激。

首先创建库对象。假设您有一个用 foo.c 编写的 foo 函数,那么您可以:

arm-none-eabi-gcc -c foo.c

-c 选项告诉编译器在汇编后停止,不再继续。

然后你需要创建.a文件

arm-none-eabi-ar -rc libfoo.a foo.o

此命令创建一个名为 libfoo.a

的静态库

最后你编译你的主程序:

arm-none-eabi-gcc -L. -lfoo main.c -o main

请注意,在 -l 标志中我们没有放置“lib”和“.a”,它们是自动添加的。 -L。 flag 告诉 gcc 查看当前文件夹中的库文件。