1.Node.js-0002-CentOS 7.9 安装 Node.js 18.x-01-编译 gcc
2.MySQL数据库上添加新功能addmysql
3.GCC 9 与 OpenMPI 4 编译安装
4.Spack:超算上最好的编译编译包管理器
5.从源码build Tensorflow2.6.5的记录
6.在无root权限下安装cuda和gcc
Node.js-0002-CentOS 7.9 安装 Node.js 18.x-01-编译 gcc
在构建前端应用的过程中,Node.js 环境是源源码必不可少的。为了实践,编译编译我们将从安装 Node.js .x 版本开始,源源码但遇到了一些版本兼容问题,编译编译尤其是源源码按键 辅助源码与/lib下的libm.so.6、libc.so.6和libstdc++.so.6相关。编译编译
鉴于之前的源源码经验,我们从错误出发,编译编译首先尝试了倒序处理。源源码在安装 Node.js .x时,编译编译发现需要解决的源源码是与gcc-7.5.0版本不兼容的libmpc-1.0.3.tar.gz。为解决这个问题,编译编译我们删除了该文件并重新尝试。源源码同时,编译编译确保安装了缺失的bzip2工具以满足编译需求。
接下来是关键步骤:编译安装gcc-7.5.0。这个过程涉及下载前置依赖,配置环境,然后进行编译和安装。完成后,我们检查了所有与libstdc++.so相关的库,并安装了mlocate工具以便于后续查找和管理。
经过这些调整,我们已经减少了与最初错误相关的三个问题。现在,Node.js .x的安装过程更加顺利,系统兼容性得到了提升。最终,我们成功地为前端应用部署设置了Node.js环境,可以继续进行后续的开发工作。
至于瓜达卢佩山脉国家公园,那是一个美丽的地方,但它与当前的Node.js安装过程并无直接关联。在结束这一技术篇时,让我们专注于代码的部署和优化。
MySQL数据库上添加新功能addmysql
MySQL数据库上添加新功能
MySQL是一款开放源代码的关系型数据库管理系统,在全球范围内被广泛应用于各种规模的企业应用和网站应用中。随着用户需求的不断变化和技术的不断更新,MySQL数据库也需要不断添加新功能以适应市场需求。本文将介绍如何在MySQL数据库上添加新功能。
一、安装插件
在MySQL数据库中添加新功能的一种方法是通过安装插件。插件是一种用于扩展MySQL数据库的方法,它可以添加新的功能和服务,同时可以提高MySQL的性能和安全性。MySQL支持多种类型的插件,包括存储引擎插件、helmplugin源码功能插件、日志插件等等。
以下是一个安装mysql_json插件的示例:
1. 下载mysql_json插件:
$ wget /gmbeal/mysql_json/releases/download/0.7.0/lib_mysqludf_json-0.7.0.tar.gz
2. 解压文件:
$ tar -zxvf lib_mysqludf_json-0.7.0.tar.gz
3. 导入插件:
$ mysql -u root -p
mysql> use mysql;
mysql> source lib_mysqludf_json-0.7.0/install.sql;
mysql> quit;
4. 测试插件:
$ mysql -u root -p
mysql> select json_extract(‘{ “id”:,”name”:”John Doe”}’, ‘$.name’);
+———–+
| json_extract(‘{ “id”:,”name”:”John Doe”}’, ‘$.name’) |
+———–+
| John Doe |
+———–+
二、编写自定义函数
在MySQL数据库中添加新功能的另一种方法是编写自定义函数。自定义函数是一种用户自定义的函数,它可以根据用户需求实现各种不同的功能。在MySQL中,用户可以使用C语言编写自定义函数,并将其编译成动态链接库,然后使用CREATE FUNCTION语句将其添加到MySQL中。
以下是一个使用自定义函数将字符串反转的示例:
1. 编写C语言代码,将其保存为reverse.c文件:
#include
#include
char *reverse(char *s)
{
char *result = (char*)malloc(strlen(s)+1);
int i,j;
for(i=strlen(s)-1,j=0;i>=0;i–,j++)
{
result[j] = s[i];
}
result[strlen(s)] = ‘\0’;
return result;
}
2. 编译代码:
$ gcc -Wall -O2 -shared -o reverse.so reverse.c `mysql_config –cflags` `mysql_config –libs`
3. 将函数添加到MySQL中:
$ mysql -u root -p
mysql> use mydb;
mysql> CREATE FUNCTION reverse RETURNS STRING SONAME ‘reverse.so’;
mysql> quit;
4. 测试函数:
$ mysql -u root -p
mysql> use mydb;
mysql> select reverse(‘Hello, world!’);
+——————+
| reverse(‘Hello, world!’) |
+——————+
| !dlrow ,olleH |
+——————+
三、使用存储引擎插件
存储引擎插件是一种特殊类型的插件,它可以添加新的存储引擎到MySQL中。存储引擎是MySQL中处理数据的核心组件,它可以决定MySQL如何存储和访问数据。用户可以编写自己的存储引擎插件,并将其添加到MySQL中,以提供更高效的数据存储和访问。
以下是一个使用TokuDB存储引擎插件的示例:
1. 下载TokuDB存储引擎插件:
$ wget /wp-content/uploads///tokudb-mysql-5.6-7.5.0.tar.gz
2. 安装插件:
$ tar -zxvf tokudb-mysql-5.6-7.5.0.tar.gz
$ cd tokudb-mysql-5.6-7.5.0
$ mysql -u root -p
3. 创建使用TokuDB存储引擎的表:
$ mysql -u root -p
mysql> use mydb;
mysql> CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(), age INT) ENGINE=TokuDB;
mysql> quit;
4. 测试TokuDB存储引擎:
$ mysql -u root -p
mysql> use mydb;
mysql> INSERT INTO mytable (name, age) VALUES (‘John Doe’, );
mysql> INSERT INTO mytable (name, age) VALUES (‘Jane Smith’, );
mysql> SELECT * FROM mytable;
+—-+————-+—–+
| id | name | age |
+—-+————-+—–+
| 1 | John Doe | |
| 2 | Jane Smith | |
+—-+————-+—–+
以上是三种在MySQL数据库中添加新功能的方法。用户可以根据自己的需求选择一种适合自己的方法,并通过实践不断深入了解MySQL数据库的各种功能和技术。
GCC 9 与 OpenMPI 4 编译安装
文章标题:GCC 9 与 OpenMPI 4 编译安装 在文献中发现HLBM模型用于模拟粒子流,该模型已在OpenLB 1.5中植入。为尝试使用,需OpenLB 1.5支持C++及并行OpenMPI 3.1或4.1。由于课题组节点的GCC版本为4.8.5,且无法联网,且无root权限,因此选择在节点上编译安装GCC 9.5.0和OpenMPI 4.1.4。 本文在CentOS 7.9(虚拟机)与RedHat 7.5(节点)上进行了测试,均无报错。GCC 9.5.0编译安装
首先从清华源下载GCC 9.5.0源码和依赖包,依赖包的下载建议在联网的Linux机上,先解压GCC源码包,执行./contrib/download_prerequisites自动下载依赖包。然后,将所有文件上传到节点。 将源码包和依赖包保存在/home/username/pack下,安装路径为/home/username/App,环境变量脚本放在/home/username/Script。编译GCC 9.5.0时,需要大约9GB硬盘空间(解压后1GB,编译中间文件6G,安装文件1.4GB)与1小时左右的机时(视硬件情况)。编译过程分为三步:设置configure、生成Makefile、avfilter 源码执行Makefile进行编译、安装。 在编译时,建议使用绝对路径设置configure,并且使用--disable-multilib只编译位的库、--enable-bootstrap追踪错误信息、--enable-checking=release以Debug方式编译。安装后,通过source ~/Script/enable_gcc-9.5.0.sh设置环境变量,以避免与系统GCC4.8.5冲突。OpenMPI 4.1.4编译安装
OpenMPI 4.1.4的安装过程与GCC相似。下载源码后,执行自动编译安装。同样需要设置环境变量,以在需要使用时快速启动。OpenLB 1.5编译测试
从OpenLB官网下载源码,根据安装指南设置环境变量,进行编译测试。测试结果保存在tmp文件夹中,可通过paraview打开进行后处理。Spack:超算上最好的包管理器
Spack是一个面向大型超级计算中心的包管理工具,支持在各种平台和环境中安装不同版本和配置的软件。用户可以在集群中安装多种软件版本,并实现相互隔离,无需特权访问。通过Spack,用户可以在集群中安装一个软件的不同版本以满足不同需求。其独特之处在于,Spack能在没有网络连接的情况下,一键解析依赖关系,并完成库的安装。这一功能通常需要复杂的编译过程,但Spack能够轻松解决此类问题。下面,我们将分步骤介绍如何安装Spack,以及如何进行基础使用。安装Spack
Spack的安装非常简单,可以通过克隆GitHub仓库到本地,然后导入Spack环境变量来完成。以下是详细步骤:下载Spack包管理器文件
导入Spack环境
对于更自动化的方法,可以将Spack环境添加到.bashrc文件中,这样每次启动shell时都会加载Spack环境。检查安装情况
测试Spack功能是否正常,通常通过使用spec模块来查询软件包依赖项。例如,使用如下命令测试gcc版本为7.5.0的编译器来编译gcc-.2.0版本。如果输出类似信息,fpm源码则说明Spack环境已成功搭建。编译器配置
Spack在首次加载环境时会自动发现当前可用的编译器。为了查看所有编译器或手动添加路径,可以使用以下命令:查看所有编译器:spack compilers 或 spack compiler list
自动或手动添加编译器路径:spack compiler find 或 spack compiler add
查看详细编译器信息:spack compiler info
指定默认编译器版本也是可选的,可以通过以下两种方式配置:配置compilers.yaml文件
在安装新软件包时指定编译器
基础使用教程
Spack提供了多种命令,用于安装和使用软件。了解基础命令是高效使用Spack的关键。查找软件包:使用spack find
列出可安装的软件包:spack list
使用*或?进行匹配查找。例如,查找mpi相关的软件包。查看软件包信息:spack info
查找软件包版本:spack versions
了解CPU架构:spack arch命令
软件包参数指定
在安装软件时,可以指定参数以优化编译过程,包括编译项、依赖关系等。这些参数有助于更精确地控制安装过程。安装和卸载软件
安装软件:使用spack install
卸载软件:使用spack uninstall
清理无用软件:使用spack gc
安装无法自动下载的软件:使用spack mirrors
使用已安装的软件
安装软件后,可以通过spack load命令导入环境变量,以便在当前会话中使用。使用spack unload命令可以取消加载的环境。创建和使用虚拟环境
Spack引入了ENV环境来创建隔离的软件包环境,有助于管理多个版本共存的问题。通过创建虚拟环境,可以仅安装与特定项目相关的软件。创建虚拟环境:spack env create
激活虚拟环境:spack env activate
取消使用虚拟环境:spack env deactive
通过以上步骤和功能,您可以充分利用Spack的强大功能,实现高效、灵活的软件包管理,特别是在超级计算环境中。从源码build Tensorflow2.6.5的记录
.从源码编译Tensorflow2.6.5踩坑记录,笔者经过一天的努力,失败四次后终于成功。Tensorflow2.6.5是截至.时,能够从源码编译的最新版本。
0 - 前期准备
为了对Tensorflow进行大规模修改并完成科研工作,笔者有从源码编译Tensorflow的需求。平时更常用的做法是在conda环境中pip install tensorflow,有时为了环境隔离方便打包,会用docker先套住,再上conda + pip安装。
1 - 资料汇总
教程参考:
另注:bazel的编译可以使用换源清华镜像(不是必要)。整体配置流程的根本依据还是官方的教程,但它的教程有些点和坑没有涉及到,所以多方材料了解。
2 - 整体流程
2.1 确定配置目标
官网上给到了配置目标,和对应的版本匹配关系(这张表里缺少了对numpy的版本要求)。笔者最后(在docker中)配置成功的版本为tensorflow2.6.5 numpy1..5 Python3.7. GCC7.5.0 CUDA.3 Bazel3.7.2。
2.2 开始配置
为了打包方便和编译环境隔离,invoke源码在docker中进行了以下配置:
2. 安装TensorFlow pip软件包依赖项,其编译过程依赖于这些包。
3. Git Tensorflow源代码包。
4. 安装编译工具Bazel。
官网的介绍:(1)您需要安装Bazel,才能构建TensorFlow。您可以使用Bazelisk轻松安装Bazel,并且Bazelisk可以自动为TensorFlow下载合适的Bazel版本。为便于使用,请在PATH中将Bazelisk添加为bazel可执行文件。(2)如果没有Bazelisk,您可以手动安装Bazel。请务必安装受支持的Bazel版本,可以是tensorflow/configure.py中指定的介于_TF_MIN_BAZEL_VERSION和_TF_MAX_BAZEL_VERSION之间的任意版本。
但笔者尝试最快的安装方式是,到Github - bazelbuild/build/releases上下载对应的版本,然后使用sh脚本手动安装。比如依据刚才的配置目标,笔者需要的是Bazel3.7.2,所以下载的文件为bazel-3.7.2-installer-linux-x_.sh。
5. 配置编译build选项
官网介绍:通过运行TensorFlow源代码树根目录下的./configure配置系统build。此脚本会提示您指定TensorFlow依赖项的位置,并要求指定其他构建配置选项(例如,编译器标记)。
这一步就是选择y/N基本没啥问题,其他参考里都有贴实例。笔者需要GPU的支持,故在CUDA那一栏选择了y,其他部分如Rocm部分就是N(直接按enter也可以)。
6.开始编译
编译完成应输出
7.检查TF是否能用
3 - 踩坑记录
3.1 cuda.0在编译时不支持sm_
笔者最初选择的docker是cuda.0的,在bazel build --config=cuda //tensorflow/tools/pip_package:build_pip_package过程中出现了错误。所以之后选择了上面提到的cuda.3的docker。
3.2 问题2: numpy、TF、python版本匹配
在配置过程中,发现numpy、TF、python版本需要匹配,否则会出现错误。
4 - 启示
从源码编译Tensorflow2.6.5的过程,虽然经历了多次失败,但最终还是成功。这个过程也让我对Tensorflow的编译流程有了更深入的了解,同时也提醒我在后续的工作中要注意版本匹配问题。
在无root权限下安装cuda和gcc
在CentOS 7.9.系统中,安装无root权限下的cuda.2和gcc-7.5.0需遵循以下步骤:
一、启动安装流程,选择"accept"项。
二、在安装界面中,避免选择"Driver"。
三、进入"Options",选定非root路径作为安装位置。
四、使用"+A"命令进入高级选项。
五、禁用"创建符号链接"。
六、调整Toolkit的安装路径。
七、进行非root权限安装。
八、激活cuda-.2。
九、参考相关文档进行操作。
十、安装gcc-7.5.0时,需先确保GMP,MPC,MPFR的版本符合要求。先在本地安装所需版本的GMP(如:6.1.2),MPC(如:1.0.2),MPFR(如:4.2.1),根据实际需求选择。
十一、创建文件夹以方便安装和使用。
十二、通过链接或本地下载方法获取GMP,MPC,MPFR及gcc的安装包。
十三、解压并安装GMP,MPC,MPFR,gcc。
十四、按照指引完成GMP,MPC,MPFR的安装。
十五、进行gcc的安装。
十六、最后,参考相关文档完成所有步骤。
正点原子嵌入式linux驱动开发——Linux C编程入门
这一章主要利用Ubuntu自带的vi编辑器进行C语言代码编写。对原理不感兴趣的读者,可以自行搜索并使用VSCode等编辑器进行操作。
首先,创建一个名为"C_Program"的文件夹,用于管理所有代码。每次编写的代码放在"C_Program"文件夹下的子文件夹中,便于管理。
在"/etc/vim/vimrc"文件中,设置tab为4个空格,并启用行号显示,通过在文件最后两行添加相应的代码实现。
设置完成后的vi编辑器,用于编写经典代码"Hello World!"。创建名为"main.c"的文件,内容如下:
使用"cat"命令查看内容,如图所示。
进行代码编译。Ubuntu下的C语言编译器为GCC,若Ubuntu未安装GCC工具,需手动安装gcc、g++和make等工具。通过安装"build-essential"软件包即可。安装完成后,使用命令查看,如图所示。
安装成功后,GCC编译器版本为7.5.0,适用于x架构CPU。对于ARM架构,需要使用针对ARM的GCC编译器,即交叉编译器。需记住不同架构下的GCC编译器不同。
使用GCC编译器编译"main.c"文件,GCC命令模式下输入命令,编译完成后生成可执行文件"a.out",使用命令"./a.out"执行,如图所示。
可自定义命名生成的可执行文件,在使用gcc命令时加上"-o"指定文件名,如编译"main.c"后生成名为"main"的可执行文件,操作如图所示。
GCC编译器命令格式如下,主要选项如下:
编写示例代码演示GCC错误警告,代码中有两处错误:在第8行少写了一个分号;第9行中的printf语句错误。编译后,GCC会给出错误提示,根据提示修改代码即可。
GCC编译流程包括预处理、编译、汇编和链接,预处理展开头文件、替换宏、解析条件编译;编译将预处理后的代码编译成汇编代码;汇编将汇编语言编译成二进制目标文件;链接将多个目标文件链接成可执行文件。
使用make命令进行编译,通过一个Makefile文件描述编译哪些源码文件、如何编译。Makefile跟脚本文件类似,执行系统命令,使用make命令即可自动完成工程编译,提高开发效率。在Linux下使用最多的GCC编译器,需要自行编写Makefile。
创建名为"Makefile"的文件,描述工程中需要编译的源码文件和依赖关系。在命令行输入"make"即可编译工程,可能遇到编译失败的情况。修改Makefile,确保在修改文件后能正确编译。Makefile中规则描述目标文件及其依赖文件,命令执行更新。
总结,Makefile中规则定义目标文件及其依赖文件,命令执行更新。Makefile的"终极目标"是Makefile文件中第一个规则的目标,没有指定目标时,默认为目标。Makefile变量用于简化代码,变量赋值使用"="或"==","=="只使用已定义的值。模式规则用于编译所有以特定后缀结尾的文件,自动化变量用于简化命令执行。Makefile中的伪目标不生成文件,用于避免与实际文件冲突。Makefile支持条件判断和函数调用,实现逻辑控制和字符串处理。
本章节介绍了在Linux环境下使用GCC和Makefile进行C语言代码的编译和执行。学习后可直接进行实践,实践过程中会更直观地理解操作流程。基础了解即可,具体应用需在实践中深入体会。
OpenFAST | 搭建编译环境(RedHat/CentOS 7)
在服务器上使用OpenFAST时,若遇到使用RedHat/CentOS 7系统时默认GCC套件版本过旧,无法顺利编译OpenFAST源码的情况,此时需将GCC套件升级至较高版本以解决此问题。本文将详细说明如何在CentOS 7系统上离线编译GCC7.5。 GCC(GNU编译器集合)是跨平台编译器的事实标准,支持多种编程语言。在CentOS 7系统中,自带的GCC套件版本为4.8,不支持C++。而GCC7.5支持C++,是理想的选择。编译OpenFAST需要依赖GCC中的g++和gfortran两个编译器。 以下是编译GCC7.5的具体步骤: 下载GCC7.5源代码并上传至服务器。 下载GCC的依赖包:gmp-6.1.0.tar.bz2、mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2、isl-0..1.tar.bz2,并上传至服务器的GCC源码根目录。 生成Makefile,确保配置项包含c、c++、fortran语言支持。 编译GCC7.5,使用多线程加速编译过程。 使用root权限安装GCC7.5。 检查GCC7.5版本。 更新动态库libstdc++.so.6。 更新普通用户环境变量。 测试编译器,确保安装成功。rtems开发环境搭建
rtems是一款开放源码的实时操作系统(RTOS),特别适用于需要实时性的嵌入式系统。它支持多种处理器架构和文件系统,例如 ARM、PowerPC、Intel、SPARC、RISC-V、MIPS 等,且提供 POSIX 标准应用编程接口(API)。在太空飞行、医疗、网络等领域的应用中,rtems 已展现出其强大的潜力。
该操作系统的一大特色是其广泛的兼容性,它支持 种处理器架构和约 种板级支持包(BSPs),为用户提供多种选择。rtems 还具备多核对称多处理(SMP)、动态加载、嵌入式 shell 等功能,进一步增强了其实时性和灵活性。rtems 的 TCP/IP 网络堆栈取自 FreeBSD,提供了强大的网络支持,还集成了 USB 功能,满足了多种应用需求。
rtems 的构建工具非常专业,能够根据芯片平台定制出一系列工具,包括编译工具链和 newlib 库。用户可以使用官方的 Git 仓库获取最新源码,并通过配置文件自定义工具链,确保构建过程的高效性和稳定性。rtems 的构建流程全面,从源码下载到内核和应用的裁剪、编译,都能提供详细的指导和文档支持。
在实际搭建过程中,使用的是 rtems-5. 版本。首先,下载对应的源码包,包括 rtems-source-builder、rtems 源码包以及用户手册。搭建过程主要参考用户手册进行,手册详细介绍了整个构建流程,是搭建环境的关键文档。
搭建环境的宿主机是 macOS 系统,官方文档中提到 macOS 对 rtems 支持良好,无需担心兼容性问题。在用户目录下创建 rtems-workspace 文件夹,将源码包解压至此,再创建一个名为 rtems-5.1.0-rc1-tools 的目录存放自定义工具包。接下来,使用命令行定制编译工具,如选择 rtems-arm 工具集合。
构建过程较为复杂,包含多步细节,用户可以通过查看生成的日志文件来跟踪构建过程。使用 gcc 版本 7.5.0 进行验证,结果显示编译过程顺利,最终生成的工具符合预期。