将一个静态库(.a)链接/打包到动态库中。

本文介绍了如何将静态库(.a)完整地链接到动态库(.so)中,包括使用特定链接选项的方法以及注意事项。讨论了动态库在不同应用程序间共享的机制,强调了进程间同步的重要性,以及动态库应自包含以避免依赖问题。

1, 如果简单用-l的方式,则so只会链接lib中需要的符号,如果需要将所有符号都塞到SO里面,可以用下面的方法:

http://stackoverflow.com/questions/7935421/linking-archives-a-into-shared-object-so

Use -Wl,--whole-archive for the linking to include the entire .a file Edit, you'll need to add -Wl,--no-whole-archive after you specify your library as well, so the whole thing will be -Wl,--whole-archive archive1.a archive2.a -Wl,--no-whole-archive


2,一个so链接到多个app

1)app运行时会自动加载需要的so文件

2)多个app可以共用so文件的代码段,但数据段是独立的

参考linker and loader

3)对于临界区代码需要增加进程间的互斥处理

4)so必须是自成系统,如果对某个app其他代码有依赖,就会在其他app找不到符号。

5)可以用不同的初始化&适配函数来定制so提供的功能。







### 3.1 创建静态库的基本流程 在 Code Composer Studio (CCS) 中创建静态库(`.a` 文件)是将多个 `.c` 源文件编译并打包一个可重用的库文件的过程。具体步骤包括新建工程、添加源文件、配置构建选项,并选择生成静态库。 在 CCS 中,可以通过创建“Static Library”类型的工程来实现这一目标。用户可以选择目标平台和编译器版本,并将需要打包的 `.c` 文件添加到该工程中。完成配置后,CCS 将自动执行编译与归档操作,生成对应的 `.a` 文件。 ### 3.2 配置静态库工程的具体操作 在 CCS 工程管理界面中,选择“New CCS Project”,然后在类型选项中勾选“Static Library”。随后,在项目设置中指定目标设备、编译器工具链以及运行时支持库路径。接着,将希望打包静态库的 `.c` 文件拖入工程的 `Source` 文件夹中,并确保它们被正确包含在构建过程中。 构建完成后,可以在工程输出目录中找到生成的 `.a` 文件。通过这种方式,其他项目只需包含对应的头文件并在链接阶段引用该静态库即可调用其中的函数[^2]。 ### 3.3 使用命令行手动创建静态库的方法 除了使用 CCS 图形界面外,也可以通过命令行方式手动创建静态库。首先,使用 `gcc` 或 `ti-cgt` 工具链将各个 `.c` 文件编译为目标文件(`.o`),例如: ```bash ti-cgt -c file1.c -o file1.o ti-cgt -c file2.c -o file2.o ``` 然后,使用 `ar` 工具将这些目标文件打包静态库: ```bash ar rcs libmylib.a file1.o file2.o ``` 最后,将生成的 `libmylib.a` 文件加入 CCS 工程的链接步骤中,并确保相应的头文件可用于外部调用[^1]。 ### 3.4 动态库的支持与限制 Code Composer Studio 主要面向嵌入式开发环境,因此对动态库(`.so` 或 `.dll`)的支持较为有限。通常情况下,TI 的 DSP 编译器工具链(如 `ti-cgt`)仅支持静态链接方式。如果需要实现类似动态加载的功能,应依赖运行时模块化设计或 RTOS 提供的动态加载机制,而非传统的 `.so/.dll` 文件格式[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值