在Anaconda环境中编译opencv3并能让python2.7调用。

这一年倾向于写有道云笔记,懒得写博客。
写得有点超级无敌乱,将就看看吧。我只是想用opencv从电影中提取人脸图片而已= = (打草稿的一篇博客 ort . .


建议下载完整的opencv源码进行编译,而不要用pip install opencv-python
也不要用conda install opencv=3.1.0 (总有一些麻烦惹上来)
参考链接:http://www.cnblogs.com/arkenstone/p/6490017.html


下载opencv 3.1.0:

$ wget https://github.com/opencv/opencv/archive/3.1.0.zip # 从github上直接下载或者clone也行
$ wget https://github.com/opencv/opencv_contrib/archive/3.1.0.zip

安装依赖包:

$ sudo apt-getinstallbuild-essential
$ sudo apt-getinstall cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-getinstall python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
$ sudo apt-getinstall libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-getinstall libxvidcore-dev libx264-dev # 处理视频所需的包
$ sudo apt-getinstall libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-getinstall ffmpeg

解压opencv包:(先看完整个3操作,再运行命令~~

$ cd opencv-3.2.0
$ mkdir build$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/fanzong/anaconda2/envs/tensorflow \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
-D PYTHON_EXCUTABLE=/home/fanzong/anaconda2/envs/tensorflow/bin/python \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ #1
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON ..
# cmake命令的使用方式:cmake [<some optional parameters>] <pathto the OpenCVsourcedirectory>。如果命令报错的话可以试着把-D后面的空格去掉在执行一次。$ make -j4
$ sudo makeinstall
$ sudo /bin/bash -c'echo "/home/fanzong/anaconda2/envs/tensorflow/lib" > /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig

以上是参考链接里面的操作,而我的编译与他点点不一样:
1. opencv全称、路径不同,OPENCV_EXTRA_MODULES_PATH是额外包,比如SIFT和SURF等那些被申请专利的都在这个包里面。
2. 我将opencv3.1.0装到anaconda中的/home/luo/anaconda2/bin/python
中,即CMAKE_INSTALL_PREFIX和PYTHON_EXCUTABLE都要改变
3. 由于我加入extra包会出现编译错误,且目前还不需要用到extra包内的方法,我最后去掉了OPENCV_EXTRA_MODULES_PATH,也去掉了cmake中的很多参数。

我的全做法是:

cd */opencv-3.1.0
mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/luo/anaconda2/ \
-D PYTHON_EXCUTABLE=/home/luo/anaconda2/bin/python ..

make -j4 # 4代表4个线程并行编译
sudo make install
由于sudo /bin/bash -c'echo "/home/fanzong/anaconda2/envs/tensorflow/lib" > /etc/ld.so.conf.d/opencv.conf',sudo ldconfig后,
我的电脑就会重启失败(或说打不开其他窗口),这是因为链接库发生错乱连接。
此处我直接不执行这两行。
如果已经执行了这两行,然后其他窗口已经打不开了,就在当前terminal中去把/etc/ld.so.conf.d/opencv.conf那行删掉,然后再sudo ldconfig。
如果已经重启失败(一直卡在ubuntu不动,提示什么 see 'systemctl' status systemd-logind.service for details ,那就从u盘启动盘进去,去在系统开机启动执行文件中加入一些代码,将那行删掉并sudo ldconfig
由于少执行这两行,导致opencv启动时候缺乏库(可以去python中import cv2看看),这时候需要把对应的库复制到对应环境中。
详情请看我的代码步骤。
  1. 在python中import cv2 时候出错
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /home/luo/anaconda2/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/luo/anaconda2/lib/python2.7/site-packages/cv2.so)
>
查阅说libstdc++.so.6 所链接(link)的对象版本不对(太低或者太高)
此处的libstdc++.so.6 -> libstdc++.so.6.0.19
而查/usr/lib/中的含有高版本的libstdc++.so.6.0.21
现在想把~/anaconda2/lib/和~/anaconda2/pkgs/libgcc-4.8.5-2/lib/中的libstdc++.so和libstdc++.so.6 的软链接指向6.0.21而非6.0.19 (将/usr/lib的复制过去)
让后对复制过去的6.0.21修改权限755(和原本的6.0.19一样)现在测试是否可行。
发现应该可行,不过出现了另外一个错误,看2.

2: 第二次import cv2 出错

>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /home/luo/anaconda2/lib/libgomp.so.1: version `GOMP_4.0' not found (required by /usr/lib/x86_64-linux-gnu/libsoxr.so.0)
看起来应该是anconda2中的*.so.*都有点旧。需要更新,或者直接修改? 此处想将一个个按1方法,复制、修改link、修改权限,来解决。查看 http://blog.csdn.net/sinat_33621733/article/details/53710868 也遇到1和2问题,1 问题的解决方法与我做法一致。(我想不复制,直接软链接过来会不会更好点?也怕乱呃其实)链接中说2问题解决方法和1一致。虽然我也这么想,但是在2中find出来的只有一个版本,并没有说版本先后。我先看看两个文件是不是一样的,如果一样,再去apt-get 更新下,看看/usr/lib*中会不会有新的版本出现。

发现/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0和~/anaconda/lib/libgomp.so.1.0.0以及/home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1.0.0不一样(后两者文件大小比较小,前者大)

且最重要的,前者能够匹配出’GOMP_4.0’,而后两个不包含这个字符串。
(采用grep -n -r -a ‘GOMP_4.0’ /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 匹配出(-n 输出行号,-r 递归文件夹,-a 将 binary 文件以 text 文件的方式搜寻数据。 在grep ~/anaconda/*中匹配不了)

现在采用将后两者删掉,用前者替换。(注意权限要一致,我先把后两者修改下名称。软链接不变

在python import cv2
成功。

下面的是我在teiminal中复制出来的过程:

上述所说的操作1:luo@nango:~/Tools/opencv-3.1.0$ find /home/luo/anaconda2/ -name *libstdc++.so*
/home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
/home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
/home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6.0.19
/home/luo/anaconda2/lib/libstdc++.so
/home/luo/anaconda2/lib/libstdc++.so.6
/home/luo/anaconda2/lib/libstdc++.so.6.0.19
luo@nango:~/Tools/opencv-3.1.0$ ls
3rdparty build CMakeLists.txt data HowToInstall LICENSE platforms samples
apps cmake CONTRIBUTING.md doc include modules README.md
luo@nango:~/Tools/opencv-3.1.0$ find /usr/lib/ -name libstdc++.so*
/usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.so
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
luo@nango:~/Tools/opencv-3.1.0$ ls -al /usr/lib/x86_64-linux-gnu/libstdc++.so*
lrwxrwxrwx 1 root root 19 9月 7 18:27 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.21
-rw-r--r-- 1 root root 1566440 11月 3 2016 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
luo@nango:~/Tools/opencv-3.1.0$ ls -al ~/anaconda2/lib/libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 7 21:21 /home/luo/anaconda2/lib/libstdc++.so -> libstdc++.so.6.0.19
lrwxrwxrwx 1 luo luo 19 9月 7 21:21 /home/luo/anaconda2/lib/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 /home/luo/anaconda2/lib/libstdc++.so.6.0.19
luo@nango:~/Tools/opencv-3.1.0$ ls -al ~/anaconda2/pkgs/libstdc++.so*
ls: cannot access '/home/luo/anaconda2/pkgs/libstdc++.so*': No such file or directory
luo@nango:~/Tools/opencv-3.1.0$ ls -al ~/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 20 2016 /home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so -> libstdc++.so.6.0.19
lrwxrwxrwx 1 luo luo 19 9月 20 2016 /home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 /home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6.0.19
luo@nango:~/Tools/opencv-3.1.0$ cp /usr/lib/x86_64-linux-gnu/libst
libstartup-notification-1.so.0 libstartup-notification-1.so.0.0.0 libstdc++.so.6 libstdc++.so.6.0.21
luo@nango:~/Tools/opencv-3.1.0$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 ~/anaconda2/lib/
luo@nango:~/Tools/opencv-3.1.0$ cd ~/anaconda2/lib
luo@nango:~/anaconda2/lib$ rm libstdc++.so
luo@nango:~/anaconda2/lib$ ln -s libstdc++.so.6.0.
libstdc++.so.6.0.19 libstdc++.so.6.0.21
luo@nango:~/anaconda2/lib$ ln -s libstdc++.so.6.0.21 libstdc++.so
luo@nango:~/anaconda2/lib$ rm libstdc++.so.6
luo@nango:~/anaconda2/lib$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
luo@nango:~/anaconda2/lib$ ls -al libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 8 15:40 libstdc++.so -> libstdc++.so.6.0.21
lrwxrwxrwx 1 luo luo 19 9月 8 15:40 libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 libstdc++.so.6.0.19
-rw-r--r-- 1 luo luo 1566440 9月 8 15:39 libstdc++.so.6.0.21
luo@nango:~/anaconda2/lib$ vim libstdc++.so
luo@nango:~/anaconda2/lib$ cd ../pkgs/
luo@nango:~/anaconda2/pkgs$ ls -al libstdc++.so*
ls: cannot access 'libstdc++.so*': No such file or directory
luo@nango:~/anaconda2/pkgs$ ls -al ./libstdc++.so*
ls: cannot access './libstdc++.so*': No such file or directory
luo@nango:~/anaconda2/pkgs$ cd libgcc-4.8.5-2/lib/
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 20 2016 libstdc++.so -> libstdc++.so.6.0.19
lrwxrwxrwx 1 luo luo 19 9月 20 2016 libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 libstdc++.so.6.0.19
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 ./
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ rm libstdc++.so
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ln -s libstdc++.so.6.0.21 libstdc++.so
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
ln: failed to create symbolic link 'libstdc++.so.6': File exists
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ rm libstdc++.so.6
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 8 15:43 libstdc++.so -> libstdc++.so.6.0.21
lrwxrwxrwx 1 luo luo 19 9月 8 15:43 libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 libstdc++.so.6.0.19
-rw-r--r-- 1 luo luo 1566440 9月 8 15:42 libstdc++.so.6.0.21
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ sudo chmod 755 libstdc++.so.6.0.21
[sudo] password for luo:
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 8 15:43 libstdc++.so -> libstdc++.so.6.0.21
lrwxrwxrwx 1 luo luo 19 9月 8 15:43 libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 libstdc++.so.6.0.19
-rwxr-xr-x 1 luo luo 1566440 9月 8 15:42 libstdc++.so.6.0.21
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ sudo chmod 755 ../../llibstdc++.so.6.0.21
lazy-object-proxy-1.2.2-py27_0/ libpng-1.6.27-0/ libxml2-2.9.4-0/ locket-0.2.0-py27_1/
libffi-3.2.1-1/ libsodium-1.0.10-0/ libxslt-1.1.29-0/ lxml-3.7.3-py27_0/
libgcc-4.8.5-2/ libtiff-4.0.6-3/ llvmlite-0.18.0-py27_0/
libgfortran-3.0.0-1/ libtool-2.4.2-0/ llvmlite-0.19.0-py27_0/
libiconv-1.14-0/ libxcb-1.12-1/ llvmlite-0.19.0-py27_0.tar.bz2
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ sudo chmod 755 ~/anaconda2/lib/libstdc++.so.6.0.21
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al ~/anaconda2/lib/libstdc++.so*
lrwxrwxrwx 1 luo luo 19 9月 8 15:40 /home/luo/anaconda2/lib/libstdc++.so -> libstdc++.so.6.0.21
lrwxrwxrwx 1 luo luo 19 9月 8 15:40 /home/luo/anaconda2/lib/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x 2 luo luo 1055192 9月 19 2015 /home/luo/anaconda2/lib/libstdc++.so.6.0.19
-rwxr-xr-x 1 luo luo 1566440 9月 8 15:39 /home/luo/anaconda2/lib/libstdc++.so.6.0.21
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ vim ~/Tools/opencv-3.1.0/HowToInstall-----------------------------------------------------------------------------------------------------------------操作2:luo@nango:~$ grep -n -r 'GOMP_4.0' /usr/lib/x86_64-linux-gnu/libgomp.so.1
Binary file /usr/lib/x86_64-linux-gnu/libgomp.so.1 matches
luo@nango:~$ grep -n -r -a 'GOMP_4.0' ~/anaconda2/lib/libgomp.so.1
luo@nango:~$ grep -n -r -a 'GOMP_4.0' ~/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
luo@nango:~$ mv ~/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1.0.0 ~/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1.0.0.old
luo@nango:~$ mv ~/anaconda2/lib/libgomp.so.1.0.0 ~/anaconda2/lib/libgomp.so.1.0.0.oldluo@nango:~$ cp /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 ~/anaconda2/lib/
luo@nango:~$ cp /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 ~/anaconda2/pkgs/libgcc-4.8.5-2/lib/
luo@nango:~$ sudo chmod 755 /home/luo/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1.0.0
luo@nango:~$ sudo chmod 755 /home/luo/anaconda2/lib/libgomp.so.1.0.0
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al ../../../lib/libgomp.so*
lrwxrwxrwx 1 luo luo 16 9月 7 21:21 ../../../lib/libgomp.so -> libgomp.so.1.0.0
lrwxrwxrwx 1 luo luo 16 9月 7 21:21 ../../../lib/libgomp.so.1 -> libgomp.so.1.0.0
-rwxr-xr-x 1 luo luo 138448 9月 8 16:29 ../../../lib/libgomp.so.1.0.0
-rwxr-xr-x 2 luo luo 60968 9月 19 2015 ../../../lib/libgomp.so.1.0.0.old
luo@nango:~/anaconda2/pkgs/libgcc-4.8.5-2/lib$ ls -al libgomp.so*
lrwxrwxrwx 1 luo luo 16 9月 20 2016 libgomp.so -> libgomp.so.1.0.0
lrwxrwxrwx 1 luo luo 16 9月 20 2016 libgomp.so.1 -> libgomp.so.1.0.0
-rwxr-xr-x 1 luo luo 138448 9月 8 16:29 libgomp.so.1.0.0
-rwxr-xr-x 2 luo luo 60968 9月 19 2015 libgomp.so.1.0.0.old

ubuntu16.04 编译 opencv3.1.0 (Anaconda)相关推荐

  1. 【ubuntu+opencv3】ubuntu16.04+qt5+opencv3.2.0编译与安装

    在网上找了很多资料,终于把opencv3.2.0在ubuntu16.04下安装成功了,由于使用qt作为开发工具,这里也顺便介绍下qt的安装与配置. 1.依赖库的安装 执行如下命令: sudo apt- ...

  2. ubuntu16.04安装opencv3.1.0(包含opencv_contrib模块)

    整理自http://blog.csdn.net/yehuohan/article/details/51327465 1.安装依赖库 sudo apt-get install build-essenti ...

  3. Ubuntu16.04编译Android 6.0系统源码过程简要记录总结

    一,安装VMware Workstation,百度网盘下载(内含注册机) 链接: https://pan.baidu.com/s/1wz4hdNQBikTvyUMNokSVYg 提取码: yed7 V ...

  4. Ubuntu16.04编译android6.0.1源码记录

    目录 目录 一.安装环境 二.下载源码 1.下载repo 2.初始化repo 3.同步源代码 关于驱动 三.编译源码 四.导入源码到AS 五.刷入真机 六.修改源码 总结: 3.同步源代码 关于驱动 ...

  5. ubuntu16.04安装opencv3.4.1教程

    最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅.  本教程原为3.3.0,但经过博主亲测,3.4.0.3.4.1皆适用 1.去官网下载opencv ...

  6. 【caffe2从头学】:1.2安装(Ubuntu16.04+GTx 1070Ti+cuda9.0+cudnn7.2+anaconda2+Python2.7+caffe2【Python版本】)

    本片文章是我的[caffe2从头学]系列中的一篇,如果想看其他文章,请看目录: 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 1.3.安装容易出现的问题 2.学习caffe2 ...

  7. 深度学习环境 Ubuntu16.04 LTS + GTX750Ti + CUDA9.0 + cudnn7.0 + python3.6.5 + tensorflow1.6搭建

    从0搭建Ubuntu深度学习环境 Ubuntu16.04 LTS + GTX750Ti + CUDA9.0 + cudnn7.0 + python3.6.5 + tensorflow1.6 之前仅仅在 ...

  8. DynamicFusion在ubuntu16.04+显卡GT740+cuda8.0上的实现

    目录 介绍 1.驱动与cuda安装 (1)驱动安装 a.驱动下载 b.禁用nouveau驱动 c.禁用X-Window服务 d.命令行安装驱动 e.驱动测试 (2)cuda7.5安装 2.环境配置 ( ...

  9. ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法)

    ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) 参考文章: (1)ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) (2)https://www. ...

最新文章

  1. 基于Web日志挖掘的个性化推荐系统(附源码)
  2. Dividing the numbers CodeForces - 899C (构造)
  3. input获得焦点和失去焦点
  4. Oracle 直方图理论
  5. OpenCV鼠标事件和滑动条事件
  6. Redis-3.2.4服务搭建
  7. Ubuntu 11.04下最流行的17款应用(linux在中国市场的占有率好像只有0.1几%)
  8. 程序员的算法课(8)-贪心算法:理解霍夫曼编码
  9. cmd sqlplus远程连接_Oracle连接远程数据库的四种方法
  10. 移动应用设计领域中最拔尖的15大应用
  11. ttf字体文件裁剪,字体文件压缩,字体文件提取
  12. httpclient 下载文件
  13. 算法第四版课后习题答案 西安电子科技大学 计算机学院 算法课
  14. zuc算法代码详解_ZUC算法-信息安全工程师知识点
  15. flink 部署模式和运行时架构(会话模式、单作业模式、应用模式,JobManager、TaskManager,YARN 模式部署以及运行时架构)
  16. 移动硬盘无法访问怎么办?还能恢复数据吗?
  17. PPT中修改已插入对象的图标
  18. 如何用gitbook写书
  19. 【人工智能】5.不确定性推理
  20. 修改计算机参数,缺氧参数怎么修改 游戏内参数修改方法解答

热门文章

  1. 拂去风尘,回家的风景最美
  2. K210连接无线路由器
  3. 单细胞论文记录(part6)--SpaGE: Spatial Gene Enhancement using scRNA-seq
  4. “全能选手”华为畅享9—华为品质,让千元机也大有可为
  5. 成都标签之——四川话
  6. 什么是监督学习?如何理解分类和回归?
  7. vs2010利用map,cod文件定位崩溃代码行
  8. 微信机器人的制作 原来如此简单
  9. 网红沈大师还是程大师,一个中肯的HCIE面试PASS
  10. 改变CLM陆面模式结果文件的输出变量、特征值及频率