当前位置: 首页 > 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

http://www.lryc.cn/news/313697.html

相关文章:

  • pip install和conda install的区别
  • 实现video视频缓存
  • Jmeter事务控制器实战
  • S4---FPGA-K7板级原理图硬件实战
  • 某些微信浏览器(比如小米手机mix2 8.0,Android 6:ZTE 7 max)input标签file属性,无法选中图片或者调用相机
  • python网络爬虫技术-mysql-5.6.39 安装
  • Projection head与使用例子
  • 2024年新版CMS内容管理使用,不用回退老版本 使用最新小程序云开发cms内容模型
  • MySql--死锁
  • 【自然语言处理六-最重要的模型-transformer-上】
  • 开发一个带有Servlet的webapp(重点)
  • 根据xlsx文件第一列的网址爬虫
  • 【Linux】 yum —— Linux 的软件包管理器
  • 函数柯里化(function currying)及部分求值
  • R语言简介、环境与基础语法及注释
  • React报错 之 Objects are not valid as a React child
  • 看一看阿里云,如何把抽象云概念,用可视化表达出来。
  • 软考笔记--系统架构评估
  • AI产品摄影丨香水
  • Linux系统——tee命令
  • Java agent技术的注入利用与避坑点
  • Linux每日练习
  • 【Python】6. 基础语法(4) -- 列表+元组+字典篇
  • 【C++庖丁解牛】C++内存管理 | new和delete的使用以及使用原理
  • go调用 c++中数组指针相关
  • NTFS Disk by Omi NTFS for mac v1.1.4中文版
  • Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行
  • 前端WebRTC局域网1V1视频通话
  • 设计模式之构建者模式
  • 【PCIe 链路训练】之均衡(equalization)