am__fastdepCXX does not appear in AM_CONDITIONAL

debian11,执行autogen.sh遇到的报错

/usr/share/automake-1.10/am/depend2.am: am__fastdepCXX does not appear in AM_CONDITIONAL
/usr/share/automake-1.10/am/depend2.am:   The usual way to define `am__fastdepCXX' is to add `AC_PROG_CXX'
/usr/share/automake-1.10/am/depend2.am:   to `configure.in' and run `aclocal' and `autoconf' again.
src/Makefile.am: C++ source seen but `CXX' is undefined
src/Makefile.am:   The usual way to define `CXX' is to add `AC_PROG_CXX'
src/Makefile.am:   to `configure.in' and run `autoconf' again.

找了半天找到的处理方案:

原文链接:am__fastdepCXX does not appear in AM_CONDITIONAL – 渊,知识厚薄也;冲,精神亢奋也; – 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园

总结下来就是两种方案,先执行第一种,如果解决了就不用执行方案2了,解决不了再用方案2试试,我是两个都用了才处理好。

方案一、安装libtool2.2以上的版本

sudo apt install libtool -y

方案二、configure.ac里面添加对应的配置(检查一下这四个选项,没有的话加上即可)

AC_INIT
AM_INIT_AUTOMAKE
AC_PROG_CXX
AC_PROG_LIBTOOL

具体问题原因,水平有限就不做误导了,有兴趣的同学可以看一下英文原版

windows开机自动运行脚本(启动wsl systemctl)和后台运行

参考文章:windows开机自动运行脚本和后台运行_林新发的博客-CSDN博客_windows开机启动脚本

1 、进入StartUp目录

地址栏输入:
C:\Users\你的账户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
或:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
前者是针对某个账户的开机启动,账户默认是Administrator,后者是针对所有账户的启动

也可以在运行栏直接输入:shell:startup

呼出运行栏的快捷键:win+r

如图:


2 、把需要自动运行的脚本的快捷方式复制到StartUp目录


这样,就可以自动执行了,一般脚本应该是.bat格式的,我这里是已经配置过后台运行的vbs脚本。

3 开机自动后台运行

上面那种方式会在前台运行,如果我们想要让脚本在后台运行,则需要写一个vbs脚本去执行我们的目标脚本。
hello.bvs

set ws=WScript.CreateObject("WScript.Shell") 
ws.Run "D:\Download\redhat\wsl_systemctl.bat /start",0 

把这个vbs脚本放到上面的StartUp目录即可。

注意:
使用了相对路径的话要在bat文件中加入:cd /d %~dp0
意思就是 “更改当前目录为批处理本身的目录”

我的systemctl开启的脚本位置以及内容如下:

这样就实现了脚本的自动后台运行,并且每次开机wsl的systemctl都会自动配置好,可直接进行使用

Windows11 wsl2 启用systemctl,systemd

我的windows11安装了wsl,debian,想要启用systemd,找了半天解决方案,在国外的大佬文章里找到了解决方案,记录一下

原文链接:WSL 2 – Enabling systemd (github.com)

稍微翻译一下内容如下:

此教程用于在wsl中启用systemd,目前测试的系统为Windows10 wsl2,Windows11 wsl2

想要在wsl中启用systemd需要一个叫做systemd-genie的软件

将install-sg.sh的内容拷贝到 /tmp/install-sg.sh当中保存

(如果可以访问github的话,直接执行下面的脚本就行,访问不了可以拷贝我最后面的代码部分,新建 /tmp/install-sg.sh ,将代码粘贴进去即可,效果一样的):

cd /tmp
wget --content-disposition \
"https://gist.githubusercontent.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950/raw/952347f805045ba0e6ef7868b18f4a9a8dd2e47a/install-sg.sh"


给脚本可执行权限:

chmod +x /tmp/install-sg.sh

运行这个脚本,并且清理掉这个脚本:

/tmp/install-sg.sh && rm /tmp/install-sg.sh


退出wsl终端并且关闭wsl,启动能够使用systemd的wsl:(这两行代码要在powershell里面执行,目前来看似乎每次重启完windows之后都要再执行以下这两个命令才能正常使用systemctl)

wsl --shutdown
wsl genie -s

验证systemctl是否可用:

sudo systemctl status time-sync.target

再wsl中执行如上脚本,类似下图说明systemctl已经可以正常使用了,这样配置完每次重启都要重新执行一下上面的powershell命令才能启用systemd,我又写了一个开机自动后台执行脚本的文章,有兴趣可以点击看看

install-sg.sh脚本我也拷贝出来了,有需要可以自取
#! /usr/bin/env bash
set -e

# change these if you want
UBUNTU_VERSION="20.04"
GENIE_VERSION="1.44"

GENIE_FILE="systemd-genie_${GENIE_VERSION}_amd64"
GENIE_FILE_PATH="/tmp/${GENIE_FILE}.deb"
GENIE_DIR_PATH="/tmp/${GENIE_FILE}"

function installDebPackage() {
  # install repackaged systemd-genie
  sudo dpkg -i "${GENIE_FILE_PATH}"

  rm -rf "${GENIE_FILE_PATH}"
}

function downloadDebPackage() {
  rm -f "${GENIE_FILE_PATH}"

  pushd /tmp

  wget --content-disposition \
    "https://github.com/arkane-systems/genie/releases/download/v${GENIE_VERSION}/systemd-genie_${GENIE_VERSION}_amd64.deb"

  popd
}

function installDependencies() {
  sudo apt-get update

  wget --content-disposition \
    "https://packages.microsoft.com/config/ubuntu/${UBUNTU_VERSION}/packages-microsoft-prod.deb"

  sudo dpkg -i packages-microsoft-prod.deb
  rm packages-microsoft-prod.deb

  sudo apt-get install apt-transport-https

  sudo apt-get update
  sudo apt-get install -y \
    daemonize \
    dotnet-runtime-5.0 \
    systemd-container

  sudo rm -f /usr/sbin/daemonize
  sudo ln -s /usr/bin/daemonize /usr/sbin/daemonize
}

function main() {
  installDependencies

  downloadDebPackage

  installDebPackage
}

main