zoukankan      html  css  js  c++  java
  • 跨平台踩的一个大坑!

    1. 必须确定目标平台的操作系统, 2. 该系统的版本号, 

    一、安装ubuntu

    下载VM14

    https://pan.baidu.com/s/1pbDXpgpNQTdTRzzKNWfE1A

    FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA

    下载ubuntu

    镜像地址 http://ftp.sjtu.edu.cn/ubuntu-cd/16.04/

    安装: https://blog.csdn.net/gongxifacai_believe/article/details/52444938?utm_source=blogxgwz4

    连接xshell

    apt-get install openssh-server

    sudo /etc/init.d/ssh start

    二、opencv安装 官网介绍

    https://docs.opencv.org/3.4.0/d7/d9f/tutorial_linux_install.html

    按照官网安装之后:

    g++ `pkg-config --cflags opencv` test.cpp `pkg-config --libs opencv` -o test

    ldd dlsd ./test

    查看缺少的链接库

    三、链接

    添加链接,相当于在Windows VS下在属性里添加头文件, 添加链接器

    vi /etc/ld.so.conf         添加 /usr/local/lib

    再运行sudo ldconfig,
    修改bash.bashrc文件,sudo vi /etc/bash.bashrc
    在文件末尾加入:
    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    export PKG_CONFIG_PATH

    source /etc/bash.bashrc

    ubantu 屏幕自适应:   apt-get install open-vm-tools  apt-get install open-vm*  reboot

    启用共享文件, 也方便文本或文件复制  https://jingyan.baidu.com/article/5553fa82957f6f65a239349b.html 

    windows可以看见共享目录, 想要linux也看见, 需要 

    vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other,nonempty   #挂载共享目

    ls /mnt/hgfs/

    +cuda.. https://www.cnblogs.com/weiweisuhe/p/6112850.html

    四、安装QT create 在ubantu开发

    下载  http://download.qt.io/archive/qt/

    无法run的时候 使用chmod 775 -R 改变文件夹权限

    qt for android:

    apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 openjdk-8-jdk -y 

    apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib -y

    apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 -y

    apt-get install dpkg-dev libsdl1.2-dev libesd0-dev -y

    apt-get install git-core gnupg flex bison gperf build-essential -y

    apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib -y

    apt-get install libc6-dev-i386 -y

    apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev -y

    apt-get install lib32z-dev ccache -y

    apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4 -y

    run安装的时候, 将所有与android有关的组件勾选。

    打开qt, Tools -> options: 

    点击example, 在样例中找到android的一些样例, 进行测试,  遇到什么问题解决什么问题,  有可能是sdk有的包没安装,   去{sdk_dir}/tools/.android    启动sdk manager   .

    C项目:

    apt-get install libgl1-mesa-dev

    新建项目, -> 空qt,   -> new 一个C++文件即可

    五、 为QT添加链接路径 

    INCLUDEPATH += /usr/local/include/*
    LIBS += /usr/local/lib/*

    添加详细路径:

    #INCLUDEPATH += /usr/local/include
    #/usr/local/include/opencv

    #LIBS += /usr/local/lib/libopencv_imgproc.so
    #/usr/local/lib/libopencv_highgui.so

    构建第三方库独立支持:

    首先安装摄像头驱动

    apt-get install libv4l-dev

    再次,由于VM USB默认使用的2.0, 造成与摄像头不兼容,  在该虚拟机选项中手动改成 USB 3.0

    测试1: 将第三方库 一起放入工程 

    在该项目下 创建一个3rdparty目录,   其下有include, lib,  两个目录,  其中内容从 /usr/local 直接复制即可

    在 .pro中  :

    LIBS += $$PWD/3rdparty/lib/*
    INCLUDEPATH += $$PWD/3rdparty/include/*
     
     
    测试2: 在QT上创建一个so共享库项目,  并用另一个普通项目调用
     
    -> 首先是配置 .pro文件
    INCLUDEPATH += /usr/local/include
    /usr/local/include/opencv
    /usr/local/include/opencv2
    LIBS += /usr/local/lib/libopencv_imgproc.so
    /usr/local/lib/libopencv_highgui.so
    /usr/local/lib/libopencv_core.so
    /usr/local/lib/libopencv_imgcodecs.so
    /usr/local/lib/libopencv_video.so
    /usr/local/lib/libopencv_videoio.so
     
    ->  编写 .so 的头文件,      注意如果包含第三方库的头文件,该引用不能写在 .so的头文件中:
    #ifndef UNTITLED2_H
    #define UNTITLED2_H
    #include <iostream>
    int run();
    #endif // UNTITLED2_H
     
    -> 编写函数: 
    #include "untitled2.h"
    #include <opencv2/opencv.hpp>
    using namespace cv;
    using namespace std;
    ...
     
    ->  新建另一个项目:    include untitled2.h       在 main() 中调用  run()即可.
     
     
    测试3: 将第三方库放在一个文件夹, 将主程序放在另一个,调用其中的include, lib即可
    -> .pro
    LIBS += $$PWD/../3rdparty/lib/*
    INCLUDEPATH += $$PWD/../3rdparty/include/*
     
    在该共享库项目中, #include "../3rdparty/include/opencv2/opencv.hpp" 即可,   然后生成一些测试函数, 打成so文件
     
    新建另一个普通项目,  引入so, 引入head, 直接调用该函数即可。
     
     当需要使用到c++11编译时,  在 .pro 文件中添加,  CONFIG += c++11
     
     
    ubantu安装 zbar
     
    wget http://downloads.sourceforge.net/zbar/0.10/zbar-0.10.tar.bz2
    tar xf zbar-0.10.tar.bz2
    cd zbar-0.10
    sed -i 's|linux/videodev.h|libv4l1-videodev.h|g' zbar/video/v4l1.c include/config.h.in configure.ac configure
    ./configure --prefix=/home/isuker/work/app/ --without-gtk --disable-video --without-imagemagick --without-python
     
     

    export CFLAGS=""

    make

    make install

    安装ndk:  

    下载: https://developer.android.google.cn/ndk/downloads/

    解压在 /app 文件夹中

    vi /etc/profile       export NDK_HOME=/home/lirui/app/android-ndk-r16b       export PATH=$NDK_HOME:$PATH       source /etc/profile

    测试:   echo $NDK       ndk-build -v

    安装到磁盘空间不足!  扩容磁盘, 充分区, 使用分区工具: apt-get install gparted

    给VM分配好空间后, 使用gparted 新增一个分区 /dev/sda3 10G, 将这个新分区挂载到 /home/lirui/app 下:

    mount /dev/sda3 /home/lirui/add/

    解除的话:  umount /dev/sda3 /home/lirui/add/

    但是, 此时的挂载 是暂时性的,  想要永久性挂载, 需要:

    blkid /dev/sda3 

    得到UUID = ebe513a0-a859-4325-84ac-a2aeb3d0b075

    vi /etc/fstab

    UUID=ebe513a0-a859-4325-84ac-a2aeb3d0b075 /home/lirui/external ext4 defaults 0 2

    df -h

    测试jdk:

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

    java -version

    javac -version

    安装sdk:

    在官网找到 SDK Tool下载 :  https://www.androiddevtools.cn/

    启动sdk manager :   android-sdk-linux/tools/android      按照目标安卓的系统安装 API,  我按的是4.4

     加入环境变量   export PATH=$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/platform-tools:$JAVA_HOME/bin:$NDK:$PATH
     
    使用QT开发:
    算了, 还是使用 android studio吧,  QT的支持还是不是很好;
     android studio 呵呵!,    还是用回QT吧!
     
     
     
     
    安装NDK:
    官网下载地址: https://blog.csdn.net/momo0853/article/details/45200093    用wget 你懂的!
     
    chmod a+x android-ndk-r10d-linux-x86.bin
    ./android-ndk-r10d-linux-x86.bin
     
    自己编译opencv for android:
     
    查看../platforms/android/android.toolchain.cmake      得知:   在/etc/profile 中, ndk的变量名,必须是 $ANDROID_NDK, 添加环境变量后,  在build目录输入:
     
    cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_NDK=$ANDROID_NDK -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=armeabi -DANDROID_NATIVE_API_LEVEL=19  ..
    

    出现各种无法解决的bug,  最终还是选择直接下载opencv 官网的 opencv for android。

    新建一个android项目,   Application -> QT widgets :

    编辑 .pro配置文件

    unix {
    message("Using unix configuration")
    ANDROID_OPENCV = E:/Qt/Qt5.3.2_Android/OpenCV-2.4.9-android-sdk/sdk/native
     
     
    INCLUDEPATH += 
    $$ANDROID_OPENCV/jni/include/opencv    
    $$ANDROID_OPENCV/jni/include/opencv2    
    $$ANDROID_OPENCV/jni/include            
     
     
    LIBS += 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_contrib.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_legacy.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_ml.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_objdetect.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_calib3d.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_video.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_features2d.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_highgui.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_androidcamera.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_flann.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_imgproc.a 
    $$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_core.a 
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/libIlmImf.a  
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibjpeg.a 
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibpng.a 
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibtiff.a 
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibjasper.a 
    $$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/libtbb.a
    }
    

     在编译时, 设置gradle: 

     找到gradle配置目录:

     

    ~/external/qt-android/Examples/Qt-5.5/quick/demos/build-calqlatr-Android_for_armeabi_v7a_GCC_4_9_Qt_5_5_0-Debug/android-build$ vi gradle.properties
    

    qt 在 ubantu下开发C/C++还行,  开发Android还是算了吧!!!!

    请转到android studio开发!

      

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Microsoft.mshtml到底是什么?
    编译.NET程序自动产生版本号的规则
    VB.NET(2005)中关于dll调用的错误信息(转)
    C# RichTextBox控件 滚动条 自动移至 最后一条记录处
    如何刪除richtextbox最後一行
    Using Hudson for C++/CMake/CppUnit
    让开发自动化: 选择持续集成服务器
    C#加载窗体错误
    各种CI工具对比表
    用 Hudson 实现 Visual Studio (C++) 项目的 daily build
  • 原文地址:https://www.cnblogs.com/ruili07/p/9831819.html
Copyright © 2011-2022 走看看