MDK工具学习
- 工程配置
-
- C语言的标准库
-
- 标准库的分类,及简介
-
- [Arm C 和 C++ 库的目录结构](#Arm C 和 C++ 库的目录结构)
- *armlib*
- *libcxx*
-
- [兼容ARM架构的二进制应用接口(Compliance with the Application Binary Interface (ABI) for the Arm architecture)](#兼容ARM架构的二进制应用接口(Compliance with the Application Binary Interface (ABI) for the Arm architecture))
MDK有着一整套工具链,包括:编辑、环境配置、工程配置、编译、调试等等。
工程配置
从 mdk6 开始,采用CLANG 编译器 和 LLVM 编译架构。
C语言的标准库
标准库的分类,及简介
分为
- C 和C++ 动态运行库 (C and C++ runtime libraries)
- Standard C library
- C micro-library
- C++
- 独立的C库 (standalone C library function)
Arm C 和 C++ 库的目录结构
库安装在<install_directory>/lib 路径下 armlib 和 libcxx 文件夹内
armlib
包含Arm C 库的变体(Arm C Library)、浮点计算库(floating-point arithmetic library 【fplib】)、 数学库(math library【mathlib】)
libcxx
包含 所有的 libc++ 和 libc++abi 库
库的头文件安装在<install_directory>/include路径下。
兼容ARM架构的二进制应用接口(Compliance with the Application Binary Interface (ABI) for the Arm architecture)
此组规范规定了一些特定兼容性规范。
- the C Library ABI for the Arm Architecture(CLIBABI)
- the Base Standard ABI for the Arm Architecture(BSABI)
- the libc++ library conforms to the C++ ABI for the Arm Architecture(CPPABI)
【解读】:MDK中对标准库的支持是采用静态二进制的加载方式,如果对其api跳转的话,只能跳到***.h文件。 并且以extern _ARMABI 方式进行声明。举例如下:
cpp
extern _ARMABI void *memcpy(void * __restrict /*s1*/,
const void * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
/*
* copies n characters from the object pointed to by s2 into the object
* pointed to by s1. If copying takes place between objects that overlap,
* the behaviour is undefined.
* Returns: the value of s1.
*/
extern _ARMABI void *memmove(void * /*s1*/,
const void * /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
/*
* copies n characters from the object pointed to by s2 into the object
* pointed to by s1. Copying takes place as if the n characters from the
* object pointed to by s2 are first copied into a temporary array of n
* characters that does not overlap the objects pointed to by s1 and s2,
* and then the n characters from the temporary array are copied into the
* object pointed to by s1.
* Returns: the value of s1.
*/
extern _ARMABI char *strcpy(char * __restrict /*s1*/, const char * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
/*
* copies the string pointed to by s2 (including the terminating nul
* character) into the array pointed to by s1. If copying takes place
* between objects that overlap, the behaviour is undefined.
* Returns: the value of s1.
*/
extern _ARMABI char *strncpy(char * __restrict /*s1*/, const char * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
/*
* copies not more than n characters (characters that follow a null
* character are not copied) from the array pointed to by s2 into the array
* pointed to by s1. If copying takes place between objects that overlap,
* the behaviour is undefined.
* Returns: the value of s1.
*/
包涵string.h、
- string.h
cpp
#ifndef __string_h /* 1. 预防重复加载 */
#define __string_h
#define __ARMCLIB_VERSION 6180002 /* 2. 版本控制 */
/* _ARMABI 译为Application Binary Interface for the ARM Architecture */
#define _ARMABI __attribute__((__nothrow__))
#ifndef __STRING_DECLS
#define __STRING_DECLS