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

Linux运维_Bash脚本_编译安装ncurses-5.6

Linux运维_Bash脚本_编译安装ncurses-5.6

Bash (Bourne Again Shell) 是一个解释器,负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年发布的免费软件,作为 Sh (Bourne Shell) 的替代品。

您可以在 Linux 和 MacOS 机器上使用 Bash,甚至可以通过适用于 Linux 的 Windows 子系统在 Windows 10 机器上使用。

使用方法

  • 下载源码包:

ncurses-5.6.tar.gz

  • 放于指定路径:

这里 Bash Shell 脚本的全局变量 STORAGE 指定的存放源码包的路径 /home/goufeng 可进行修改。

  • 执行 Bash Shell 脚本:

输入 /[路径名]/[脚本名].sh 即可进行自动编译部署,过程中提示输入 (y/n) 输入 y 则进行下一步,这样分阶段确认的原因是为了确保能够看到上一个源码编译结果中可能的错误和提示。

完整脚本

#! /bin/bash
# Create By GF 2024-03-05 21:11# --------------------------------------------------
# Install First: 
# * GNU-Tools (Contains: pkg-config, m4, autoconf, automake, libtool, gettext, flex, bison, libiconv, make)# Need File: ncurses-5.6.tar.gz# ##################################################
STORAGE=/home/goufeng# Function: 编译安装(Compile Install) ncurses-5.6
# ##################################################
function Compile_Install_ncurses_5_6() {# ncurses (new curses) 是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。# ncurses 名字中的n意味着 "new", 因为它是 curses 的自由软件版本。由于 AT&T "臭名昭著" 的版权政策, 人们不得不在后来用 ncurses 去代替它。# ncurses 是 GNU 计划的一部分, 但它却是少数几个不使用 GNU GPL 或 LGPL 授权的 GNU 软件之一。# 其实我们对 ncurses 本身并不陌生,以下几款大名鼎鼎的软件都用到过 ncurses:#     * vim#     * emacs#     * lynx#     * screen# 作为嵌入式驱动开发工程师, Linux 内核的配置也离不开 ncurses 库的使用。if [[ ! -d "/opt/ncurses-5.6" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------echo "[Confirm] Compile and Install ( ncurses-5.6 )? (y/n)"# ..........................................read VERIFY# ..........................................if [[ $VERIFY != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf $STORAGE/ncurses-5.6.tar.gz && STEP_UNZIPPED=1# ------------------------------------------if [[ $STEP_UNZIPPED == 1 ]]; then# --------------------------------------# * Problem: In file included from ../c++/cursesf.h:39:0,#                             from ../c++/cursesf.cc:35:#            ../c++/cursesp.h: In member function ‘T* NCursesUserPanel<T>::UserData() const’:#            ../c++/cursesp.h:253:43: error: no matching function for call to ‘NCursesUserPanel<T>::get_user() const’#                 return reinterpret_cast<T*>(get_user ());#                                                       ^#            ../c++/cursesp.h:79:9: note: candidate: void* NCursesPanel::get_user() <near match>#               void *get_user()#                     ^~~~~~~~#            ../c++/cursesp.h:79:9: note:   passing ‘const NCursesUserPanel<T>*’ as ‘this’ argument discards qualifiers#            In file included from ../c++/cursesf.cc:35:0:#            ../c++/cursesf.h: In member function ‘T* NCursesUserForm<T>::UserData() const’:#            ../c++/cursesf.h:707:43: error: no matching function for call to ‘NCursesUserForm<T>::get_user() const’#                 return reinterpret_cast<T*>(get_user ());#                                                       ^#            ../c++/cursesf.h:384:16: note: candidate: void* NCursesForm::get_user() <near match>#               inline void *get_user() {#                            ^~~~~~~~#            ../c++/cursesf.h:384:16: note:   passing ‘const NCursesUserForm<T>*’ as ‘this’ argument discards qualifiers#           ............................#   -Solve: 出错的原因是 GCC 编译器版本过高。新版 C++ 标准中 const 成员函数不可以调用非 const 成员函数。#           错误提示 discards qualifiers 因为 get_user() 是非 const 的, 而 UserData() 是 const 成员函数, 不可以调用非 const 成员函数。#           ............................#           -  T* UserData (void) const#           +  T* UserData (void)#              {#                return reinterpret_cast<T*>(get_user ());#              };sed -i "251s/T\* UserData (void) const/T\* UserData (void)/" $STORAGE/ncurses-5.6/c++/cursesp.hsed -i "706s/inline T\* UserData (void) const/inline T\* UserData (void)/" $STORAGE/ncurses-5.6/c++/cursesf.hsed -i "662s/inline T\* UserData (void) const/inline T\* UserData (void)/" $STORAGE/ncurses-5.6/c++/cursesm.hfi# ------------------------------------------cd $STORAGE/ncurses-5.6 && ./configure --prefix=/opt/ncurses-5.6 \--enable-pc-files \--enable-shared \--with-libtool && \STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenif [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fiif [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi# ......................................# Skip # ln -sf /opt/ncurses-5.6/bin/* /usr/local/bin/# ......................................rsync -av /opt/ncurses-5.6/include/ /usr/local/include/rsync -av /opt/ncurses-5.6/lib/     /usr/local/lib/# ......................................ln -sf /opt/ncurses-5.6/share/terminfo /usr/local/lib/# ......................................cp -f /opt/ncurses-5.6/include/ncurses/*.h /usr/local/include/# ......................................cp -f /opt/ncurses-5.6/lib/pkgconfig/form.pc      /opt/lib/pkgconfig/cp -f /opt/ncurses-5.6/lib/pkgconfig/menu.pc      /opt/lib/pkgconfig/cp -f /opt/ncurses-5.6/lib/pkgconfig/ncurses.pc   /opt/lib/pkgconfig/cp -f /opt/ncurses-5.6/lib/pkgconfig/ncurses++.pc /opt/lib/pkgconfig/cp -f /opt/ncurses-5.6/lib/pkgconfig/panel.pc     /opt/lib/pkgconfig/fi# ------------------------------------------ldconfig# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/ncurses-5.6 && return 0elseecho "[Caution] Path: ( /opt/ncurses-5.6 ) Already Exists."# ------------------------------------------return 0fi
}function main() {Compile_Install_ncurses_5_6
}main

总结

以上就是关于 Linux运维 Bash脚本 编译安装ncurses-5.6 的全部内容。

更多内容可以访问我的代码仓库:

https://gitee.com/goufeng928/public

https://github.com/goufeng928/public

相关文章:

Linux运维_Bash脚本_编译安装ncurses-5.6

Linux运维_Bash脚本_编译安装ncurses-5.6 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…...

pip install和conda install的区别

先说结果&#xff1a;日常对于python的学习和简单项目推荐使用pip安装&#xff0c;效率更高&#xff0c;也不会有很多依赖问题。 首先&#xff0c;无论是conda还是pip&#xff0c;它们都属于包管理工具&#xff0c;直白点来说就是用来下载东西的。 二者的区别主要有以下几点&…...

实现video视频缓存

方法一 要实现视频被播放过后本地有缓存&#xff0c;下次播放无需网络即可播放&#xff0c;你可以利用浏览器的本地存储功能&#xff08;如localStorage或IndexedDB&#xff09;来实现。 你可以在视频播放结束时&#xff0c;将视频的URL以及相关信息存储在本地存储中。然后&a…...

Jmeter事务控制器实战

在性能测试工作中&#xff0c;我们往往只测试业务功能相关主要接口的数据请求和返回。然而实际上用户在使用web应用时&#xff0c;可能会加载诸多资源&#xff1a;htmldom、cssdom、javaScript、ajax请求、图片等。 从打开一个页面到界面渲染完成需要一定的加载时间&#xff0…...

S4---FPGA-K7板级原理图硬件实战

视频链接 FPGA-K7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-K7板级原理图硬件实战 基于XC7K325TFFG900的FPGA硬件实战框图 基于XILINX 的KINTEX-7 芯片XC7K325FPGA的硬件平台&#xff0c;FPGA 开发板挂载了4 片512MB 的高速DDR3 SDRAM 芯片&#xff0c;另外板上带有一个SODIM…...

某些微信浏览器(比如小米手机mix2 8.0,Android 6:ZTE 7 max)input标签file属性,无法选中图片或者调用相机

1.初始化wxConfig (appId,timestamp,nonceStr,signatur,jsApiList) window.localStorage.setItem(currentUrl, window.location.href); 2.wx.checkJsApi({jsApiList: [chooseImage] // 需要检测的JS接口列表success: function(res) {// 以键值对的形式返回&#xff0c;可用的ap…...

python网络爬虫技术-mysql-5.6.39 安装

一、下载安装文件 到 MySQL官网 下载 mysql-5.6.39 压缩包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/14e05FMhcWE8bvvStwyevNQ 提取码&#xff1a;1234 参考安装教程...

Projection head与使用例子

概念介绍 在深度学习中&#xff0c;Projection head是一种用于提取特征或表征的网络结构。它通常是一个或多个全连接层&#xff0c;将输入的高维特征映射到一个低维的向量空间&#xff0c;以便于进行后续的任务&#xff0c;如对比学习、聚类、分类等。 Projection head的使用…...

2024年新版CMS内容管理使用,不用回退老版本 使用最新小程序云开发cms内容模型

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…...

MySql--死锁

一、什么是mysql死锁? MySQL中的死锁是指多个事务同时请求对同一资源进行操作(读或写),并且由于资源被互斥地锁定,导致彼此无法继续进行。当发生死锁时,MySQL会自动选择其中一个事务作为死锁的牺牲者,回滚该事务,并释放锁定的资源,从而解除死锁。 以下是一些处理MyS…...

【自然语言处理六-最重要的模型-transformer-上】

自然语言处理六-最重要的模型-transformer-上 什么是transformer模型transformer 模型在自然语言处理领域的应用transformer 架构encoderinput处理部分&#xff08;词嵌入和postional encoding&#xff09;attention部分addNorm Feedforward & add && NormFeedforw…...

开发一个带有Servlet的webapp(重点)

【具体步骤如下】 ①在webapps目录下新建一个目录&#xff0c;起名crm&#xff08;这个crm就是webapp的名字&#xff09;。当然&#xff0c;也可以是其他目录&#xff0c;名字自拟 注意&#xff1a;crm就是这个webapp的根 ②在webapp的根下新建一个目录&#xff1a;WEB…...

根据xlsx文件第一列的网址爬虫

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx&#xff0c;第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…...

【Linux】 yum —— Linux 的软件包管理器

Linux 的软件包管理器 yum yum 是什么什么是软件包查看软件包 yum 命令行工具yum 配置文件yum 凭什么可以支持下载呢&#xff1f;yum 生态yum 社区yum 的故障排除和资源支持yum 的持续集成和持续交付 yum 是什么 Yum&#xff08;Yellowdog Updater Modified&#xff09;是一个…...

函数柯里化(function currying)及部分求值

函数柯里化&#xff08;function currying&#xff09; currying又称部分求值。一个currying的函数首先会接受一些参数&#xff0c;接受了这些参数之后&#xff0c;该函数并不会立即求值&#xff0c;而是继续返回另外一个函数&#xff0c;刚才传入的参数在函数形成的闭包中被保…...

R语言简介、环境与基础语法及注释

R语言是一种功能强大的开源统计分析语言和编程环境。它提供了丰富的数据处理、数据可视化和统计分析函数&#xff0c;适用于各种数据分析和建模任务。 R语言的环境主要包括R编程环境和RStudio集成开发环境&#xff08;IDE&#xff09;。R编程环境是R语言的核心&#xff0c;它提…...

React报错 之 Objects are not valid as a React child

原文链接&#xff1a; 1、React报错之Objects are not valid as a React child 2、Objects are not valid as a React child error [Solved] 作者&#xff1a;Borislav Hadzhiev 以下文中涉及到的链接均来自于该作者&#xff0c;他写了很多相关的文章&#xff0c;可以多看看他的…...

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享...

软考笔记--系统架构评估

系统架构评估是在对架构分析、评估的基础上&#xff0c;对架构策略的选取进行决策。它利用数据或逻辑分析技术&#xff0c;针对系统的一致性&#xff0c;正确性&#xff0c;质量属性&#xff0c;规划结果等不同方面&#xff0c;提供描述性&#xff0c;预测性和指令性的分析结果…...

AI产品摄影丨香水

AI电商产品拍摄丨&#xff08;可指定产品&#xff09; 均为概念图 可换产品 可指定产品&#xff0c;可换logo 工具&#xff1a;StartAI 搭配“手机摄影”风格使用效果更佳哦 咒语&#xff1a;anha perfume in bottle on stone surface, in the style of everyday american…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...