C/C++编程-工程实践-MDK工具学习

MDK工具学习

  • 工程配置
    • 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)

此组规范规定了一些特定兼容性规范。

  1. the C Library ABI for the Arm Architecture(CLIBABI)
  2. the Base Standard ABI for the Arm Architecture(BSABI)
  3. 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、

  1. 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
相关推荐
小肝一下33 分钟前
多态(上)
android·开发语言·c++·vscode·多态·面向对象·伊蕾娜
无敌秋43 分钟前
python/c++/java上云
java·c++·python
code_pgf10 小时前
C++11 / C++14 / C++17 / C++20 新特性总结
c++·c++20
麻瓜老宋12 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
颜x小14 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
汉克老师15 小时前
GESP2026年3月认证C++八级( 第三部分编程题(2、子图最短路)精讲
c++·最短路·floyd·gesp8级
abcd_zjq16 小时前
海康线扫相机使用
c++·海康
十五年专注C++开发16 小时前
C++设计一个函数来求容器元素绝对值之和的平均值
c++·模板·accumulate
SilentSlot16 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
王老师青少年编程18 小时前
csp信奥赛C++高频考点专项训练:【排序算法】案例9:成绩排序
c++·排序算法·csp·高频考点·信奥赛·成绩排序