当前位置: 首页 > news >正文

im6ull学习总结(三-3)freetype

1、Freetype简介

FreeType是一个开源的字体渲染引擎,主要用于将字体文件转换为位图或矢量图形,并在屏幕上渲染出高质量的字体。它提供了一组API,使开发者能够在自己的应用程序中使用和呈现字体。
FreeType最初是作为一个独立项目开发的,后来成为许多其他开源软件的重要组成部分,例如GNU Image Manipulation Program(GIMP)、Ghostscript、LibreOffice等。它也被广泛应用于操作系统中,用于在屏幕上显示和打印文本。
FreeType支持多种字体格式,包括TrueType(TTF)、OpenType(OTF)、PostScript(PS)、以及其他一些常见的字体格式。它具有强大的字体轮廓解析和渲染功能,可以处理各种字体效果,如抗锯齿、子像素渲染等。它还支持字体缓存管理、跨平台适配等功能,使得字体的渲染和显示更加高效和灵活。
通过使用FreeType,开发者可以轻松地在自己的应用程序中实现高质量的字体渲染,无论是在计算机、移动设备还是嵌入式系统中。它对于构建图形用户界面(GUI)、排版系统、图像处理软件等具有重要的作用。
总结起来,FreeType是一个功能强大的开源字体渲染引擎,为应用程序提供了丰富的字体处理和渲染功能,使得字体在屏幕上呈现更加清晰和准确。

2、交叉编译freetype

echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v -
可以确定头文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
在这里插入图片描述
库文件的系统目录为:
LIBRARY_PATH=/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib/:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/lib/:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/
在这里插入图片描述
我们编译的目的是什么呢
这里先引入一些编译的知识

头文件和库文件

头文件(Header File)通常包含一些函数、变量、结构体等声明,用于将这些声明导入到当前源文件中,以便在当前源文件中使用这些声明。头文件通常以.h为扩展名,并通过#include预处理指令将其包含到源文件中。

库文件(Library File)则是已经编译好的二进制代码,包含了一些函数、变量、结构体等定义,并提供了对它们的访问接口。库文件通常以.lib(Windows)或.a(Linux)为扩展名,并通过链接器将其与当前源文件进行链接,以便在运行时使用这些函数和变量。

头文件和库文件通常都是由第三方库提供的,可以通过官方网站下载或者在操作系统上进行安装。在使用一个库时,需要将其头文件包含到源文件中,并将其库文件链接到当前可执行程序中,以便在运行时使用其中的函数和变量。
也就是说头文件是我们编译时需要导入到源文件(.c)的(.h)文件用于编译。而库文件是编译好的二进制文件链接器将他们链接起来生成可执行文件

编译是将高级语言代码翻译成机器语言代码的过程,通常分为四个流程:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
复习一下编译过程:
预处理(Preprocessing):预处理器将源代码中以“#”开头的预处理指令进行处理,如#include、#define等,将它们转换为实际的代码,并生成一个新的扩展名为“.i”的文件。这个过程主要是为了方便代码重用和管理,以及提高编译效率。

编译(Compilation):编译器将预处理后的代码(即.i文件)翻译成汇编语言代码(即.s文件),并检查代码中的语法错误。编译器将高级语言代码转换成汇编语言代码的过程中,包括了词法分析、语法分析、语义分析、优化等过程。

汇编(Assembly):汇编器将汇编语言代码(即.s文件)翻译成机器语言代码(即.o文件)。汇编器将高级语言代码转换成机器语言代码的过程中,主要是将汇编语言代码中的指令、寄存器、内存地址等转换成相应的二进制码。

链接(Linking):链接器将目标文件(即.o文件)和库文件(如果有的话)链接成一个可执行文件(即.exe文件或.out文件)。链接器将目标文件和库文件中的代码、数据等内容合并起来,生成一个独立可执行的文件,它包含了程序的完整功能。
c/h->i->s->o->(o+a)->.out/.exe

我们想用一个开源库就会用到开源库里面的头文件和库文件,那么如何找到我们编译的开源库的头文件和库文件,就需要我们将库的头文件和库文件放到指定的编译工具链中,这样编译时就会找到了
也就是说我们要进行一下两个步骤
1、如果你编译的是一个库,请把得到的头文件、库文件放入工具链的 include、lib 目录里。别的程序要使用这些头文件、库时,会很方便。
echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v –
它会列出头文件目录、库目录(LIBRARY_PATH)。
2、把库文件放到板子上的/lib 或/usr/lib 目录里
程序在板子上运行时,需要用到板子上/lib 或/usr/lib 下的库文件;程序运行时不需要头文件。

交叉编译freetype的过程

freetype 依赖于 libpng,libpng 又依赖于 zlib,所以我们应该:先编译安装 zlib,再编译安装 libpng,最后编译安装 freetype。
第1步 确定头文件、库文件在工具链中的目录

先设置交叉编译工具链:
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-

export PATH=$PATH:/home/book/100ask_imx6ullsdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

这里注意这只是将当前shell中的环境变量更换了,并不会将.bashrc中的环境变量进行变换。所以当我们更换一个终端后就失效了,想要永久生效,就是修改.bashrc中的文件。

我们可以通过echo $环境变量名来查看当前shell下环境变量的值
比如
在这里插入图片描述
但是.bashrc中的值还是arm

以 IMX6ULL 开 发 板 为 例 , 它 的 工 具 链 是 arm-buildroot-linux-gnueabihf-gcc,可以执行以下命令:
echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v -
这个命令是用来测试交叉编译器的预处理功能。具体来说它通过管道将字符串 ‘main(){}’ 传递给 arm-buildroot-linux-gnueabihf-gcc 编译器,并要求其执行预处理操作。
-E 选项告诉编译器只执行预处理操作并将结果输出到标准输出。-v 选项用于显示编译器的版本和配置信息。最后的短横线 - 表示从标准输入读入数据。

执行该命令后,arm-buildroot-linux-gnueabihf-gcc 将对输入的代码进行预处理,并输出预处理后的代码到标准输出。同时还会显示编译器的版本和配置信息。

需要注意的是,由于这是一个测试命令,它不会生成可执行文件或目标文件,而是用来验证编译器是否能够正确地执行预处理操作。

可以确定头文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/
bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
库文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/
bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib

第2步 交叉编译、安装 libpng
freetype 依赖于 libpng,所以需要先编译、安装 libpng
将libpng-1.6.37.tar.xz拷贝到./当前目录下
tar xJf libpng-1.6.37.tar.xz

这个命令是用来解压缩 libpng-1.6.37.tar.xz 压缩包的。

tar 是一个常用的归档工具,可以将多个文件和目录打包成单个文件,并在需要的时候进行解包。xJf 参数告诉 tar 解包并解压缩一个 xz 压缩过的 tarball 文件。

具体来说,x 选项表示解包,J 表示使用 xz 压缩格式,f 表示从文件中提取数据,并且后面必须跟随要解包的文件名。因此,tar xJf libpng-1.6.37.tar.xz 命令会将当前目录下的 libpng-1.6.37.tar.xz 文件解压缩到当前目录,并创建一个名为 libpng-1.6.37 的目录,其中包含所有的文件和子目录。
注意这是个小写x大写J小写f

这个命令是用来配置软件包以在 arm-buildroot-linux-gnueabihf 主机上进行交叉编译,并指定一个临时目录。

./configure --host= arm-buildroot-linux-gnueabihf --pre
fix=$PWD/tmp
./configure 是一个常见的脚本,用于自动检测系统环境并生成适合当前系统的编译选项。通过运行这个脚本,您可以为软件包指定一些选项,例如安装路径、编译器、依赖项等。

–host=arm-buildroot-linux-gnueabihf 参数告诉 configure 脚本,我们希望将软件包配置为在 arm-buildroot-linux-gnueabihf 主机上进行交叉编译。这是因为该主机使用的是 ARM 架构,与当前系统架构不同。

–prefix=$PWD/tmp 参数设置安装路径为当前工作目录下的 tmp 目录。通常,这个临时目录用于存放交叉编译后的二进制文件和库文件,而不会对系统产生影响。

注意, P W D 表示当前工作目录的路径。然后执行 b o o k @ 100 a s k : / l i b p n g − 1.6.37 PWD 表示当前工作目录的路径。 然后执行 book@100ask:~/libpng-1.6.37 PWD表示当前工作目录的路径。然后执行book@100ask: /libpng1.6.37 make
book@100ask:~/libpng-1.6.37$ make install
运行配置文件时不会生成tmp文件
需要make 和 make install 后自动生成

然后复制文件
cp include/* -rf /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include

cp lib/* -rfd /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib/

引入知识点
/…/

在 Linux 和 Unix 系统中,/…/ 是一个特殊的路径符号,表示返回到上一级目录。这个符号用于简化路径,在指定路径时可以去掉它。

例如,假设当前工作目录为 /home/user/Documents,那么路径 /home/user/Documents/…/Downloads 可以简化为 /home/user/Downloads,因为 /…/ 表示返回到上一级目录 /home/user。

需要注意的是,如果一个路径中包含多个 /…/,则它们可以被合并成一个,例如:

/home/user/Documents/…/…/Downloads 可以简化为 /home/Downloads。
/home/user/Documents/…/Downloads/…/Pictures 可以简化为 /home/user/Pictures。
在编写脚本或命令时,正确使用路径符号可以让代码更加简洁和可读,也可以避免一些路径相关的错误。

cp

cp -rfd 是 cp 命令的另一种参数组合,用于复制文件或目录,并在复制过程中进行一些操作。具体含义如下:

-r 选项表示递归地复制目录及其内容。
-f 选项表示强制复制,即在目标位置已有同名文件或目录时,不提示用户而是直接覆盖。
-d 选项表示复制时保留符号链接,而不是解引用它们。
因此,cp -rfd 命令通常用于递归地复制目录及其内容,并且在复制过程中保留符号链接。同时,它也会在目标位置已存在同名文件或目录时进行覆盖。这种参数组合可以在需要复制目录结构并保留符号链接的情况下使用。

当使用 cp 命令复制文件或目录时,如果原始文件或目录中包含符号链接(软链接),默认情况下 cp 命令会解引用这些符号链接,并复制它们所指向的实际文件或目录。但是使用 -d 选项后,cp 命令会保留这些符号链接,而不是解引用它们。

举个例子,假设有一个名为 source 的目录,其中包含一个名为 file1 的普通文件和一个名为 link1 的符号链接,指向 file1。现在我们使用 cp -rd source destination 命令将 source 目录复制到 destination 目录:

bash
$ ls -l source
-rw-r–r-- 1 user user 10 Jan 3 15:00 file1
lrwxrwxrwx 1 user user 5 Jan 3 15:01 link1 -> file1
默认情况下,如果我们运行 cp -r source destination,那么 destination 目录中的 link1 将会变成一个指向 file1 的新文件,而不再是一个符号链接。但是如果我们运行 cp -rd source destination,那么 destination 目录中的 link1 将保持为一个符号链接,仍然指向 file1。

这样做的好处是,在目标位置保留符号链接可以使得目标位置的目录结构保持原样,符号链接仍然指向正确的文件或目录,而不会被解引用导致指向错误的位置。

编译freetype

freetype 依赖于 libpng,libpng 又依赖于 zlib,所以我们应该:先编译安装 zlib,再编译安装 libpng,最后编译安装 freetype。但是,有些工具链里有 zlib, 那就不用编译安装 zlib,比如 STM32MP157。本节文档以 IMX6ULL 开发板中 arm-buildroot-linux-gnueabihf-gcc 工具链为例,对于其他开发板:工具链可能不一样,请灵活变通。

第一步设置交叉编译工具链

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-

export PATH=$PATH:/home/book/100ask_imx6ullsdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

以 IMX6ULL 开 发 板 为 例 , 它 的 工 具 链 是 arm-buildroot-linux-gnueabihf-gcc,可以执行以下命令:
echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v -
可以确定头文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
库文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib
第二步编译libpgn
但是注意这个存在问题我在这搞了一天还是官方帮搞定的
逻辑是这样的先编译freetype

./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp

在这里插入图片描述
这里已经包含bzip2和libpng了那就不要按照原有手册上编译libpng了,编译了反而出错。导致lib里面的文件为x86-64具体原因我没弄明白。

这个 注意编译后的头文件和库文件都放在这两个链接下,这个手册上有问题:

/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
库文件的系统目录为:
/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/…/lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/…/…/…/…/arm-buildroot-linux-gnueabihf/lib

相关文章:

im6ull学习总结(三-3)freetype

1、Freetype简介 FreeType是一个开源的字体渲染引擎,主要用于将字体文件转换为位图或矢量图形,并在屏幕上渲染出高质量的字体。它提供了一组API,使开发者能够在自己的应用程序中使用和呈现字体。 FreeType最初是作为一个独立项目开发的&…...

基于OpenCV的谷物颗粒识别

基于OpenCV的谷物颗粒识别 一、程序整体功能介绍1.1 导入库与函数定义1.2 颜色分割与灰度处理1.3 二值化与轮廓检测1.4 绘制与计数1.5 主程序与结果展示 二、算法原理与实现流程2.1算法原理(1)颜色分割(2)灰度处理与二值化&#x…...

Aloha 机械臂的学习记录3——AWE:Pycharm运行代码记录

之前的博客创作了三偏关于Aloha_AWE的liunx终端指令运行代码的示例: Aloha 机械臂的学习记录——AWE:Bimanual Simulation Suite: https://blog.csdn.net/qq_54900679/article/details/134889183?spm1001.2014.3001.5502 Aloha 机械臂的学习记录1——AWE&#x…...

开源协议概览

身为程序员,我们不可避免的要和开源项目打交道,不管是我们自己做了些开源项目,还是使用开源项目,对各种开源协议的了解是必要的。 OSI(Open Source Initiative) OSI,开发源代码组织,是一个旨在推动开源软件…...

分布式缓存

分布式缓存 缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库 CPU 和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应&#xf…...

BSC/平衡记分卡

一、Balanced Score Card BSC即平衡计分卡(Balanced Score Card),是常见的绩效考核方式之一,是从财务、客户、内部运营、学习与成长四个角度,将组织的战略落实为可操作的衡量指标和目标值的一种新型绩效管理体系。 是…...

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM:训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…...

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述: 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog,el-dialog里面有个大的div它的id为app-pre-meet-add,在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…...

flutter的状态管理学习

文章目录 1.flutter widget分类2. 代理组件又分为3. 状态 state 数据4. 刷新 数据变化5. code 1.flutter widget分类 组合渲染代理 2. 代理组件又分为 Positioned向父组件传递数据InheritedWidget向子组件传递数据 3. 状态 state 数据 状态就是用到了向子组件传递数据&#xff…...

开源免费虚拟化KVM的部署及其虚拟机资源变更、快照、克隆等常见运维操作

实践说明:基于RHEL9(AlmaLinux9.1)部署,同类系统(CentOS9,RockyLinux9等)适用,但适用场景是不限于此的。 文档说明:本文档旨在帮助快速应用KVM虚拟化技术,重在实践操作,提供了简要参考。 文档形成时期&…...

阿里云git clone超时报错解决方法

参考:引用文章...

力扣刷题-二叉树-合并二叉树

617.合并二叉树(经典) 合并二叉树是操作两棵树的题目里面很经典的,如何对两棵树遍历以及处理? 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并…...

了解JavaScript 加密、混淆和生成签名

分析并理解网站的 JavaScript 加密、混淆和生成签名的方法是 JavaScript 逆向工程中的一个重要方面。这些技术通常用于保护代码免遭未授权的访问和修改,或确保数据在传输过程中的安全性。 加密 目的:加密用于保护敏感数据,使得只有拥有正确密…...

Go语言的指针(深度解析)

指针是Go语言中的一个重要概念,它提供了对内存地址的直接访问和操作能力。通过指针,我们可以高效地传递和修改变量的值,避免了值传递所带来的拷贝开销。在本文中,我们将深入探讨Go语言指针的概念、使用方法和注意事项。 指针的本…...

HTB-SAU

信息收集 # cat port.nmap # Nmap 7.94 scan initiated Thu Jan 11 19:26:51 2024 as: nmap -sS --min-rate 10000 -p- -oN port.nmap 10.10.11.224 Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (0.28s latency). Not shown: 65531 closed tcp ports (r…...

AI创新之美:AIGC探讨2024年春晚吉祥物龙辰辰的AI绘画之独特观点

🎬 鸽芷咕:个人主页 🔥 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…...

Linux的SSH服务

一.SSH服务简介 1.什么是SSH SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应…...

MySQL连续案例续集

01)查询学过「张三」老师授课的同学的信息 SELECT s.*, c.cname, t.tname, sc.score FROM t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc WHERE t.tid c.tid AND c.cid sc.cid AND sc.sid s.sid AND t.tname ‘张三’ 02&#x…...

【STM32读取HX711的函数】

[两个普通IO读取HX711数据的函数-主芯片是STM32F407] 以下是.h文件中的内容: #ifndef __hx711_h #define __hx711_h #define HX711CH1_DIO_GROUP GPIOA #define HX711CH1_CLK_GROUP GPIOA #define HX711CH1_DIO_PIN GPIO_Pin_1 #define HX711CH1_CLK_PIN GPIO_Pin…...

MATLAB对数据隔位抽取和插值的几种方法

对于串行的数据,有时我们需要转成多路并行的数据进行处理,抽取;或者是需要对数据进行隔点抽取,或对数据进行插值处理。此处以4倍抽取或插值为例,MATLAB代码实现。 文章目录 抽取方法一:downsample函数方法…...

[NSSCTF Round#16 Basic] CPR

打着玩玩,比赛很简单。 Crypto pr 一个RSA题,n1p*q,n2q*r给了两个c和p,r而且flag经过pad用单因子无法解出。分别用p,r解完再取crt from Crypto.Util.number import * import randomflagplaintext NSSCTF{****************} charset abcdefghijklmn…...

LAMMPS 文献:9 种熔化温度模拟方法的总结与比较:两相法、单相法以及缺陷法

记录一下检索到一篇通过LAMMPS模拟熔化温度的总结文章:单相方法、过热–过冷方法、Z 方法、修正 Z 方法、孔洞方法、修正孔洞方法、两相方法、夹层方法以及修正两相法。 感谢论文的原作者! 文章题目: A comprehensive investigation on the…...

JSR-107 (JCACHE)

JSR107 Specification 1.1.1 Maintenance Release https://docs.google.com/document/d/1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA/edit?pli1 What is JSR-107? JSR-107 is a standardized API for temporary, in-memory caching in Java applications. It defines a s…...

kylin4.0.3升级问题

话接前文: kylin升级(3.0.1->kylin-4.0.3)-CSDN博客文章浏览阅读941次,点赞29次,收藏12次。原本的cube太多了,换其他OLAP数据库太麻烦。相比之下,升级是一个很好的选择(官网有说明内存降低和构…...

【UML】第16篇 活动图

目录 一、什么是活动图 二、应用场景: 三、绘图符号的说明: 四、语法: 五、例图 六、建模的流程 6.1 对业务流程建模时 6.2 对用例进行活动图建模时 一、什么是活动图 活动图(Activity Diagram)是UML中用于描…...

Python学习之路-函数进阶

Python学习之路-函数进阶 参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,一共有4 种组合形式:无参数,无返回值;无参数,有返回值;有参数,无返回值&#xff…...

Mac打包Unix可执行文件为pkg

Mac打包Unix可执行文件为pkg 方式一:通过packages页面打包 1.下载packages app Distribution:自定义化更高,包括修改安装页面的内容提示 我这里主要演示Distribution模式的项目:通过unix可执行文件postinstall.sh脚本实现通过ma…...

C++ 模拟散列表 || 哈希表存储与查询,模版题(拉链法)

维护一个集合,支持如下几种操作: I x,插入一个整数 x ; Q x,询问整数 x 是否在集合中出现过; 现在要进行 N 次操作,对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N &#xff0c…...

详解Skywalking 服务Overview页面的参数含义(适合小白)

本文针对刚刚接触skywalking的同学,重点讲解服务Overview页面中各个参数的含义,为大家快速上手skywalking会起到帮助作用! 最重要的三个指标 Service Apdex(数字):当前服务的评分 Successful Rate(数字&a…...

Android studio GridView应用设计

一、xml布局文件设计: <GridViewandroid:id="@+id/gridView"android:layout_width="match_parent"android:layout_height="match_parent"tools:layout_editor_absoluteX="1dp"tools:layout_editor_absoluteY="1dp"andr…...