class="hljs-ln-code"> class="hljs-ln-line">sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libgtk-3-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev pkg-config
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"># 添加源以继续安装依赖libjasper
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line">sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt-get install libjasper-dev
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    其中GStreamer是用来构建流媒体应用的开源多媒体框架,简化音视频应用程序开发,可以用来处理像 MP3OggMPEG1MPEG2AVIQuicktime 等多种格式的多媒体数据。与它有关的库:libgstbase-1.0.so.0, libgstreamer-1.0.so.0, libgstapp-1.0.so.0, libgstriff-1.0.so.0, libgstpbutils-1.0.so.0, libgstaudio-1.0.so.0, libgstvideo-1.0.so.0。

    GTK是一个开源的跨平台GUI工具包。使用imshow等函数会用到

    2.安装交叉编译工具链,配置aarch安装包环境

    aarch64-linux-gnu-gcc 是一个交叉编译工具链,可以在其他架构的系统中,编译安装 64 arm 架构的程序。常用在嵌入式代码的移植中。aarch64-linux-gnu-gcc 是由 Linaro 公司基于 GCC 推出的的 ARM 交叉编译工具。可用于交叉编译 ARMv8 64 位目标中的裸机程序u-bootLinux kernelfilesystem App 应用程序。aarch64-linux-gnu-gcc 交叉编译器必须安装在 64 位主机上,才能编译目标代码。

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">sudo dpkg –add-architecture
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">sudo touch /etc/apt/source.list.d/arm-cross-compile-sources.list
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">sudo vi /etc/apt/source.list.d/arm-cross-compile-sources.list
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">#在打开的文件添加以下内容
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal main restricted
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates main restricted
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal universe
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates universe
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal multiverse
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates multiverse
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line">deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line">#更新包
    14. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt-get update
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

     3.安装arrch64对应平台包-后面再缺啥补啥

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt-get install libgstreamer1.0-dev:arm64 libgstreamer-plugins-base1.0-dev:arm64 libglib2.0-dev:arm64
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt install libglib2.0-dev:arm64
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt install libgtk2.0-dev:arm64
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">sudo apt install libgtk-3-dev:arm64
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    4.获取源码opencv3.4.5

    方式1:源码下载 https://opencv.org/releases/ 找对应source3.4.5版本的下载。

    然后unzip opencv-3.4.5.zip

    方式2:使用命令下载:

    git clone https://github.com/opencv/opencv.git

    cd opencv //切换到3.4.5版本

    git checkout 3.4.5

    5.编译opencv-使用cmake命令

    OpenCV2.2以后版本需要使用cmake工具生成编译OpenCV的makefile文件。这是因为 CMake 提供了跨平台支持,能够自动处理不同平台的依赖关系和配置。

    当程序是一个源文件时,直接使用gcc命令就可以编译。对于多个源文件的项目,使用 make 工具更为高效。make 本身并不执行编译和链接,而是通过批处理方式执行 Makefile 中指定的命令来完成这些任务。Makefile 中包含了调用 gcc编译器的命令。在小型项目中,可以直接编写 Makefile 进行编译和链接;而在大型项目中,手动维护 Makefile 可能会变得复杂且不方便。此时,使用 CMake 工具更加灵活,它通过解析 CMakeLists.txt 文件生成跨平台的 Makefile。

    运行 CMake 后,会输出一些编译信息和中间文件(包括 Makefile)。这些中间文件在发布代码时通常可以删除,因为它们不需要随代码一起分发。通过创建一个专门的构建目录(例如 build)来存放这些中间文件,可以使项目结构更为清晰。

    PS:CMake 工具利用 CMakeLists.txt 文件生成跨平台的 Makefile,而 make 则利用这些 Makefile 批处理编译和链接源文件。

    方式1:使用cmake配置指令

    首先在opencv源码目录下创建一个中间构建目录build

    sudo mkdir build

    cd build 进入build目录

    配置cmake在指令中添加交叉编译链路径:

    sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=ON -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install  -D WITH_GTK=ON  WITH_GTK_2_X=ON ..
    解释:

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">-D CMAKE_BUILD_TYPE=RELEASE:指定编译类型为RELEASE,将启用优化和禁用调试信息
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">-D CMAKE_INSTALL_PREFIX=./install:指定安装目录(重要!避免与X86版本混淆),如果不加该命令。则默认各部分分别安装在/usr/local目录的include/,bin/,lib/文件夹下。
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">-D WITH_GSTREAMER=ON:启用GStreamer支持,使opencv可以读取和写入GStreamer流
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line">
    7. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> -D WITH_GTK=ON  WITH_GTK_2_X=ON:指定开启GTK支持
    8. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line">
    9. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">-D WITH_OPENGL=OFF:指定关闭OpenGL支持
    10. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line">
    11. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line">-D BUILD_SHARED_LIBS=ON:表示生成动态库,OFF为静态库
    12. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line">
    13. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line">CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt。保存并退出。-lpthread支持线程;-ldl避免未定义dlopen;-lrt避免未定义
    14. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line">
    15. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line">.. :表示回到上一级目录
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    执行完cmake后会生成make的清单,但还没有开始编译,查看清单交叉编译工具链的路径识别是否正确,各功能支持是否符合期望。

    除了直接在配置cmake指令中添加交叉编译链路径,还可以修改在opencv中的platform/linux/aarch64-gnu.toolchain.cmake修改添加工具链路径:

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">set(CMAKE_SYSTEM_PROCESSOR aarch64)
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
    3. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
    4. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
    5. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">set(GNU_MACHINE "aarch64-linux-gnu" CACHE STRING "GNU compiler triple")
    6. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line">include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    然后修改cmake工具链路径-D CMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++为DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake

    然后查看配置:

    GTK为yes,表示已经打开GTK支持。如果目标开发板不支持GTK可以使用QT

    开始编译:

    在build目录下新建install目录(安装目录,cmake安装路径自己设置的)

    sudo mkdir install

    sudo make -j4 //开始编译,4根据CPU核心数调整,我的虚拟机是4核的

    编译成功,在install目录下生成四个文件

    6.安装opencv

    sudo make install安装成功:

    7.编译Yolov5demo

    修改example/rknn_yolov5_demo下的CMakeList.txt文件的opencv路径,example中的样例使用的是一个简易的OpenCV库,需要切换到自己编译生成的OpenCV库,OpenCV_DIR变量改为已安装的路径build/install/share/OpenCV(根据上下文写绝对路径)

    编译yolov5_video_demo,生成可执行程序成功

    sudo ./build-linux_RK3588.sh

    将opencv-install-lib目录下的库文件cp到如下目录。(重要),不上传会在板端报找不到xxx.so库文件的错误。

    8.推送板端

    进入板端rknn_yolov5_demo_Linux目录,先运行指令:

    export LD_LIBRARY_PATH=./lib,然后执行rtsp流输入命令安装成功:

    2、使用cmake-gui编译opencv-失败例程

    cmake --version //查看是否安装cmake

    sudo apt-get install cmake-gui

    cmake-gui --version

    cd opencv

    sudo mkdir build

    sudo cmake-gui .. //进入工具链配置界面,后面空格加两点启动图形界面

    卸载cmake指令:sudo apt-get autoremove cmake

    图忘记截下来了,找的网图(下同,侵权联系我删除)。

    where is the source code:里写上opencv的源文件路径

    where to build the binaries:里面写上作为cmake编译arm64的工作目录(创建的build文件)

    然后点击configure

    这里generator保持为Unix Makefiles,然后选择第四个选项:Specify options for cross-compiling
    最后点击Next。

    Targeting System选的是Linux,version可以不用管。target root为交叉编译工具所在包含文件夹/usr/aarch-linux-gnu/lib,C\C++为对应工具链的路径:/usr/bin/aarch64-linux-gun-gcc/g++。

    点击finish。

    查看中间红色配置部分:

    选择配置注意:勾选BUILD_JPEG、BUILD_PNG。Search位置输入install找到CMAKE_INSTALL_PREFIX 将后面的值改为安装目录,不改安装到usr/local目录下,容易与x86版本的搞混。Search位置输入Z,把zip库(BUILD_ZLIB选项)选中(Ubuntu 20.04 不选择可能会报错)。勾选GTK GTK_2X配置,然后点击configure,点击generate。关闭对话框。使用cmake生成makefile文件。

    这个时候在下面就会看到配置,精彩的时候到了,发现我已经勾选了GTK配置,结果显示NO,导致后面推送板端报错找不到对应文件。果断放弃图形配置,使用cmake指令行。(目前没找到原因)。如果不需要GTK的就可以直接开始编译了。

    cd build

    sudo make -j4

    sudo make install

    3.报错汇总:

    1.编译Yolov5过程中报错,安装架构错误:

    重装aarch64架构

    2.编译opencv报重入错误报告程序:

    内存不足,清理内存

    3.板端推理报错;

    将opencv生成的所有动态库cp到执行文件的lib目录下

    4.板端推理报错;

    使用imshow等函数,但GTK配置禁用导致,重新编译opencv启用GTK配置。

    5.编译opencv报错

    直接使用opencv目录的zlib,即/opencv/3rdparty/zlib/zlib.h。找到报错对应的文件,修改头文件为相对路径,例如:

    #include "zlib.h" 改为#include "../zlib/zlib.h"

    #include "../../../3rdparty/opencv/3rdparty/zlib/zlib.h"

    解释:../../../3rdparty/opencv/3rdparty/zlib 是从 src 目录到 zlib 目录的相对路径。../表示回到上一级目录

    6.编译opencv报错:

    可能原因1:安装对应依赖

    可能原因2:更换工具链(我使用之前安装的交叉编译工具链会一直报找不到文件的错误,后安装aarch64-linux-gnu解决问题)

    检查是否安装对应依赖项;

    pkg-config --cflags --libs gtk+-2.0

    或dpkg -L libgtk2.0-dev

    7.编译opencv报错(使用原本工具链的错误)

    ../../lib/libopencv_imgcodecs.so.3.4.5: undefined reference to `png_init_filter_functions_neon'

    找到图示下的头文件,修改对应内容解决:

    1. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">/*# if (defined(ARM_NEON) || defined(__ARM_NEON)) && \ */该行注释掉换为下面的一行
    2. class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">#if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \
    class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    4.杂记

    查看已安装OpenCV版本指令:

    pkg-config --modversion opencv

    未编译成功清理文件指令:

    进入中间构建文件build目录执行:

    sudo rm -rf *

    然后重新配置cmake编译。

    如果安装在系统文件夹:

    进入build目录

    执行sudo make uninstall 此命令会删除安装时添加的所有文件,但是不处理文件夹。可将opencv相关的可执行文件、lib文件等从/usr/local/bin//usr/local/libusr/local/share中删除,不过还是会留空下文件夹,需要手动删除。

    rm -r build 删除目的文件夹

    rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

    参考资料:

    1. opencv-3.4.1-arm编译安装 QT-- 超详细:

    opencv-3.4.1-arm编译安装 -- 超详细_opencv arm编译-CSDN博客

    1. OpenCV 之交叉编译及ARM移植

    https://www.ebaina.com/articles/140000017232

    1. opencv-4.1-arm编译安装 -- 超详细

    opencv-3.4.1-arm编译安装 -- 超详细_opencv arm编译-CSDN博客

    1. 移植opencv到嵌入式arm详细过程

    移植opencv到嵌入式arm详细过程_arm 使用opencv-CSDN博客

           1.ubuntu 20.04 aarch64 平台交叉编译 glib

    ubuntu 20.04 aarch64 平台交叉编译 glib_aarch64 glib 版本-CSDN博客

            1.RK3588移植-opencv交叉编译aarch64

    RK3588移植-opencv交叉编译aarch64_rk3588 rknpu2 imshow 没有-CSDN博客

    data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/znscst/article/details/142932061","extend1":"pc","ab":"new"}">>
    注:本文转载自blog.csdn.net的曲小道的文章"https://blog.csdn.net/znscst/article/details/142932061"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
    复制链接

    评论记录:

    未查询到任何数据!