Ubuntu16配置caffe和faster RCNN

2023-12-27 14:10

本文主要是介绍Ubuntu16配置caffe和faster RCNN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


主要参考了这篇文章https://blog.csdn.net/yhaolpz/article/details/71375762和https://blog.csdn.net/sinat_30071459/article/details/51332084,写的很好,也是对下次再安装写一个说明书

硬件是GTX1060的显卡

1、安装依赖包

2、安装NVIDIA显卡驱动
3、切换GCC版本
4、安装CUDA 8.0
5、验证 CUDA 8.0 是否安装成功
6、安装 cudnn
7、安装 opencv3.1
9、安装 caffe

9、安装 pycaffe

10、配置faster R-CNN


第1步 安装依赖包

安装后续步骤或环境必需的依赖包,依次输入以下命令:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compilersudo apt-get install --no-install-recommends libboost-all-devsudo apt-get install libopenblas-dev liblapack-dev libatlas-base-devsudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-devsudo apt-get install git cmake build-essential

有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:

 sudo apt-get install git cmake build-essential 

界面提示如下则说明已成功安装依赖包,否则继续安装直到安装成功。

yhao@yhao-X550VB:~$ sudo apt-get install git cmake build-essential
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
build-essential 已经是最新版 (12.1ubuntu2)。
cmake 已经是最新版 (3.5.1-1ubuntu3)。
git 已经是最新版 (1:2.7.4-0ubuntu1.1)。
下列软件包是自动安装的并且现在不需要了:lib32gcc1 libc6-i386
使用'sudo apt autoremove'来卸载它(它们)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 94 个软件包未被升级。

第2步  安装NVIDIA显卡驱动

安装好依赖包后需要禁用 nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

打开后发现该文件中没有任何内容,写入:

blacklist nouveau option nouveau modeset=0 

保存时命令窗口可能会出现以下提示:

** (gedit:4243): WARNING **: Set document metadata failed: 不支持设置属性 metadata::gedit-position

无视此提示~,保存后关闭文件,注意此时还需执行以下命令使禁用 nouveau 真正生效:

sudo update-initramfs -u


修改后需要重启系统。确认下Nouveau是已经被你干掉,使用命令: lsmod | grep nouveau


然后下载NVIDIA显卡驱动:http://www.geforce.cn/drivers选择适合自己显卡的版本


重启系统至init 3(文本模式),也可先进入图形桌面再运行init 3进入文本模式,再安装下载的驱动就无问题,

首先我们需要结束x-window的服务,否则驱动将无法正常安装

关闭X-Window,很简单:sudo service lightdm stop,然后切换到tty1控制台:Ctrl+Alt+F1即可


接下来就是最关键的一步了:sudo ./NVIDIA.run开始安装,安装过程比较快,根据提示选择即可

我安装的是NVIDIA-Linux-x86_64-390.25

最后安装完毕后,重新启动X-Windowsudo service lightdm start,然后Ctrl+Alt+F7进入图形界面;

查看NVIDIA驱动是否正常安装,使用下面的命令查看

nvidia-smi

nvidia-settings



 第三步 切换gcc 版本

需要注意的一点是ubuntu16.04的gcc版本是5.4,而cuda8.0在该系统中支持的gcc版本不超过5.3,所以第一步需要对GCC版本进行降级。
(1)下载gcc源码

wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz

(2)解压
tar -zxvf gcc-5.3.0.tar.gz
(3)下载编译所需依赖项:

cd gcc-5.3.0                    //进入解包后的gcc文件夹
./contrib/download_prerequisites                  //下载依赖项
cd ..                          //返回上层目录

(4)建立编译输出目录:
mkdir gcc-build-5.3.0
(5)进入输出目录,执行以下命令,并生成makefile文件:

cd gcc-build-5.3.0
../gcc-5.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

(6)编译:
sudo make -j4
接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。
(7)编译结束以后,我们就可以执行安装了:
sudo make install
(8)检查gcc和g++版本
gcc --version
这里写图片描述
g++ --version

这里写图片描述


第4步 安装 CUDA 8.0

第四步下载的1.4G的 CUDA中包含有 nvidia 显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动,若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动(卸载方法链接),然后开始安装 CUDA 8.0;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 8.0,在安装过程中选择不再安装 nvidia 显卡驱动(我使用的是之前安装好的nvidia驱动)。

为了方便开始安装过程的路径查找,把下载的 CUDA 安装文件移动到 HOME 路径下,然后通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录,通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:

sudo service lightdm stop

然后通过 Ctrl + Alt + F7 发现已无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的 nvidia 驱动安装尤为重要,必需确保桌面服务已关闭。

Ctrl + Alt + F1 进入文本模式,然后运行 CUDA 安装文件进行安装,之前我们已经把 CUDA 安装文件移动至 HOME,直接通过 sh 命令运行安装文件即可:

sudo cuda_8.0.61_375.26_linux.run --no-opengl-libs

其中 cuda_8.0.61_375.26_linux.run 是我的 CUDA 安装文件名,而你需替换为自己的 CUDA 安装文件名,若此时忘记可直接通过 ls 文件查看文件名,这也是我建议把 CUDA 安装文件移动到 HOME 下的另一个原因。

执行此命令约1分钟后会出现 0%信息,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里的选择对应第5步开头,若未安装则输入 “y”,若确保已安装正确驱动则输入“n”。

剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为未关闭桌面服务或在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启:

reboot

重启后登录进入系统,配置 CUDA 环境变量,与第3步相同,使用 gedit 命令打开配置文件:

sudo gedit ~/.bashrc

在该文件最后加入以下两行并保存:

export PATH=/usr/local/cuda-8.0/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

使该配置生效:

source ~/.bashrc

第5步 验证 CUDA 8.0 是否安装成功

分别执行以下命令:

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuerysudo make./deviceQuery

若看到类似以下信息则说明 cuda 已安装成功:

./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "GeForce GT 740M"CUDA Driver Version / Runtime Version          8.0 / 8.0CUDA Capability Major/Minor version number:    3.5Total amount of global memory:                 2004 MBytes (2100953088 bytes)( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA CoresGPU Max Clock rate:                            1032 MHz (1.03 GHz)Memory Clock rate:                             800 MhzMemory Bus Width:                              64-bitL2 Cache Size:                                 524288 bytesMaximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layersMaximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layersTotal amount of constant memory:               65536 bytesTotal amount of shared memory per block:       49152 bytesTotal number of registers available per block: 65536Warp size:                                     32Maximum number of threads per multiprocessor:  2048Maximum number of threads per block:           1024Max dimension size of a thread block (x,y,z): (1024, 1024, 64)Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)Maximum memory pitch:                          2147483647 bytesTexture alignment:                             512 bytesConcurrent copy and kernel execution:          Yes with 1 copy engine(s)Run time limit on kernels:                     NoIntegrated GPU sharing Host Memory:            NoSupport host page-locked memory mapping:       YesAlignment requirement for Surfaces:            YesDevice has ECC support:                        DisabledDevice supports Unified Addressing (UVA):      YesDevice PCI Domain ID / Bus ID / location ID:   0 / 1 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 740M
Result = PASS
我没有安装cuda他的NVIDIA驱动,所以
CUDA Driver Version = 9.1, CUDA Runtime Version = 8.0

不知道以后会有什么影响

PS:这个地方后来遇到问题了,一定要相同否则训练faster rcnn会报Check failed: error == cudaSuccess (30 vs. 0)  unknown error这个错误。

解决方法就是重新安装显卡驱动,用nvidia-smi查看当前安装的显卡驱动,375的Driver Version是8.0版本,384是9.0版本,390是9.1版本。重装375显卡驱动就好了。


第6步 安装 cudnn

登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录,不想注册的可从我的网盘下载:https://pan.baidu.com/s/1c2xPVzy

这里写图片描述

下载完成后解压,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:

sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件

然后命令行进入 cudn/lib64 路径下,运行以下命令:

sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
这里需要先查看一下自己应该链接的是 libcudnn.so.5.1.10 还是 libcudnn.so.5.1.5 ,查看方法为下:
locate libcudnn.so
这里第三行链接命令视你的查看结果而定。

安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

yhao@yhao-X550VB:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

但此时查询cuda会出现问题

nvcc -V

问题是

The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit

但是我们已经安装了cuda,在 /usr/local 能够看到文件夹 cuda-8.0。 这需要如下设置

执行sudo gedit ~/.bashrc,在最后面,64位的话粘贴以下内容:

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

接着执行 source ~/.bashrc 使其立即生效
下面查询

nvcc -V

可见如下结果

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17

第7步 安装 opencv3.1

进入官网 : http://opencv.org/releases.html , 选择 3.1.0 版本的 source , 下载 opencv-3.1.0.zip
这里写图片描述

解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,

修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件内容,如图:
这里写图片描述执行:

mkdir build # 创建编译的文件目录cd build

安装OpenCv 3.1的过程中要下载ippicv_linux_20151201,由于网络的原因,这个文件经常会下载失败。

解决的办法是手动下载:

  • 先下载 OpenCV 3.1
Download MD5 sum: 6082ee2124d4066581a7386972bfd52a
Download size: 76 MB
Estimated disk space required: 1.8 GB
Estimated build time: 4.9 SBU
  • 下载 ippicv_linux_20151201

解压OpenCV并进入其目录,运行下面的命令。

  • 创建ippicv_linux_20151201的目录,带MD5.
ipp_file=../ippicv_linux_20151201.tgz             &&
ipp_hash=$(md5sum $ipp_file | cut -d" " -f1)      &&
ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash &&mkdir -p $ipp_dir &&
cp $ipp_file $ipp_dir
  • 编译OpenCV
mkdir build &&
cd    build &&cmake -DCMAKE_INSTALL_PREFIX=/usr \-DWITH_XINE=ON              \
      -DBUILD_TESTS=OFF           \
      -Wno-dev  ..
make -j8

或者更简单一点,在确保MD5是808b791a6eac9ed78d32a7666804320e的情况下:
在OpenCV源代码的根目录下创建目录:
opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
将下载后的ippicv文件拷进去。
编译OpenCV:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j8  #编译

一定要加上-j8,不然慢的出奇


编译成功后安装:

sudo make install #安装

安装完成后通过查看 opencv 版本验证是否安装成功:

pkg-config --modversion opencv  
zyr@lab:~/cuda/opencv-3.1.0/build$ pkg-config --modversion opencv

2.4.9.1

然而最后显示2.4.9.1的版本,很费解

第8步 安装 caffe

首先在你要安装的路径下 clone :

git clone https://github.com/BVLC/caffe.git

进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

sudo cp Makefile.config.example Makefile.config

复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

sudo gedit Makefile.config

修改 Makefile.config 文件内容:

1.应用 cudnn

#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1

2.应用 opencv 版本

#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3

3.使用 python 接口

#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1

4.修改 python 路径

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为: 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial       
然后修改 caffe 目录下的 Makefile 文件:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
  • 1
  • 2
  • 3
  • 4

然后修改 /usr/local/cuda/include/host_config.h 文件 :

将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

OK ,可以开始编译了,在 caffe 目录下执行 :

make all -j8

这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。

编译成功后可运行测试:

sudo make runtest -j8

测试的时候会报错


.build_release/tools/caffe: error while loading shared libraries: libcudnn.so.5: cannot open shared object file: No such file or directory
Makefile:534: recipe for target 'runtest' failed

make: *** [runtest] Error 127

最后再加一句

sudo ldconfig /usr/local/cuda/lib64

因为cuda的路径可能设置错了,由于

安装CUDNN的时候吧cudnn放在了/usr/local/cuda/lib64目录下,而没有放在/usr/local/cuda8.0/lib64,目录下。有部分攻略在安装CUDA8.0会在~/.bashrc中声明export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}, 即为CUDA库函数地址。但这个路径是错误的,改成export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}},就不会出现:"libcudart.so.8.0 cannot open shared object file: No such file or directory"以及 "libcudnn.so.5 cannot open shared object file: No such file or directory"

9、安装 pycaffe

cd caffesudo make pycaffe -j8

以下是我编译 pycaffe 时出现的错误:

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录

解决方法:

sudo apt-get install python-numpy

10、配置faster R-CNN

这里会报很多错误,一定要耐心
参考这篇文章:https://blog.csdn.net/sinat_30071459/article/details/51332084

但是执行 ./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc  的时候报错了


这是因为这里没取消掉注释



然后重新make

又出现一个错误

解决方案再下面一行

然后又出现一个错误

这里安装protobuf

https://blog.csdn.net/woainiwss/article/details/50585665

然后参考这个设置环境变量

https://www.cnblogs.com/darkknightzh/p/5993405.html


ps:顺便研究一下configure,make和make install的区别

https://blog.csdn.net/vivian187/article/details/51750639


以及/etc/profile 与 /etc/bashrc 的区别

首先,shell分为登录式shell和非登录时shell,两者的读取配置文件的顺序是不一样的.

登录式shell读取配置文件的顺序为 /etc/profile -> /etc/profile.d/*.sh -> ~/.bash.profile -> ~/.bashrc -> /etc/bashrc

非登录式shell读取配置文件的顺序为 ~/.bashrc ->/etc/bashrc -> /etc/profile.d/*.sh

/etc/profile 文件中设定的环境变量,运行的命令或脚本,针对所有用户有效

/etc/bashrc 文件中设定的本地变量,定义的别名,针对所有启动的shell程序的用户有效

这两个配置文件是全局的。

~/.bash_profile 作用跟/etc/profile是一样的,只不过针对的是某一个用户

~/.bashrc的作用跟/etc/bashrc也是一样的,只不过针对的也是某一个用户


下一个错误:

ImportError: No module named 'yaml'
输入
pip install pyyaml

下一个错误


解决方案:再训练之前加sudo

    sudo  ./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc 

终于可以正常训练了!


这篇关于Ubuntu16配置caffe和faster RCNN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543379

相关文章

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华