RS6000编译工具:ar命令详解与静态库管理

需积分: 15 0 下载量 179 浏览量 更新于2024-07-14 收藏 59KB PPT 举报
本文主要介绍了在RS6000平台上使用编译工具进行程序开发的过程,重点讲解了Makefile在构建过程中的作用以及与各类编译文件(如运行文件、静态库文件和动态库文件)相关的工具。以下是详细的知识点总结: 1. **Makefile编写**: Makefile是编译系统中用于自动化构建过程的文本文件,它定义了如何将源代码转换为目标文件,并最终生成可执行文件。在这个过程中,Makefile包含了编译规则和依赖关系,使得编译步骤可以按需执行。 2. **编译工具**: - **运行文件编译工具**: 使用cc(可能包括xlc, xlc_r, xlC, xlC_r),这些是C编译器,用于生成对象文件和可执行文件。不同的编译器有不同的选项,如 `-o` 指定输出文件名,`-c` 用于编译,`-g` 添加调试信息,`-I` 和 `-L` 分别添加头文件搜索路径和静态库路径。 - **静态库编译工具**: ar,具有多种功能,如 `-d` 删除目标文件,`-v` 显示详细操作,`-r` 替换库文件中的目标,`-x` 展开库,`-t` 列出库中目标文件,以及 `-X` 根据平台选择32位或64位链接。 - **动态库编译工具**: ld,用于链接程序,`-b3264OBJECT_MODE` 是设置32位或64位的链接模式,glink可能是特定环境下的一种链接器,负责生成全局符号等。 3. **Oracle预编译器**: PRO*C是Oracle的预处理器,用于将SQL嵌入C代码中,预编译器会处理嵌入的SQL并生成与ORACLE库兼容的代码。关键参数如`define` 和 `config` 文件用于设置编译环境。 4. **C编译器参数**: C编译器提供了丰富的选项,如指定输出文件名,生成obj文件,开启调试信息,增加头文件和库文件搜索路径等,以满足不同需求。 5. **编译时注意事项**: 在编译过程中,特别提到对32位和64位支持的不同,以及针对特定类型的变量(如128位Double类型)和线程库的选择。 6. **静态库管理**: 对静态库的处理至关重要,通过ar工具可以维护和管理库文件,确保正确性并避免目标文件冲突。 通过以上知识点,开发者可以更有效地利用Makefile和各种编译工具在RS6000平台上进行程序的构建,确保兼容性和性能优化。

arm-none-eabi-gcc -o "SENSOR_CB.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\Users\WangBingqian\Desktop\SC10L151Cube\trunk\NO_FOTA_VERSION\STM32L151CBTXA_FLASH.ld" --specs=nosys.specs -Wl,-Map="SENSOR_CB.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group Core/Src/rs485.o: In function `get_sample_data_max_min_value': rs485.c:(.text.get_sample_data_max_min_value+0x0): multiple definition of `get_sample_data_max_min_value' Core/Src/lora_wan.o:lora_wan.c:(.text.get_sample_data_max_min_value+0x0): first defined here Core/Src/rs485.o: In function `computeMvScale': rs485.c:(.text.computeMvScale+0x0): multiple definition of `computeMvScale' Core/Src/lora_wan.o:lora_wan.c:(.text.computeMvScale+0x0): first defined here Core/Src/rs485.o: In function `computeMvScale_f': rs485.c:(.text.computeMvScale_f+0x0): multiple definition of `computeMvScale_f' Core/Src/lora_wan.o:lora_wan.c:(.text.computeMvScale_f+0x0): first defined here Core/Src/rs485.o: In function `generate_frag_data': rs485.c:(.text.generate_frag_data+0x0): multiple definition of `generate_frag_data' Core/Src/lora_wan.o:lora_wan.c:(.text.generate_frag_data+0x0): first defined here Core/Src/rs485.o:(.bss.frag_num+0x0): multiple definition of `frag_num' Core/Src/lora_wan.o:(.bss.frag_num+0x0): first defined here collect2.exe: error: ld returned 1 exit status make: *** [makefile:50: SENSOR_CB.elf] Error 1 "make -j4 all" terminated with exit code 2. Build might be incomplete.是什么错误

2023-06-09 上传
2024-10-16 上传