跨平台踩的一个大坑!

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开发!

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/ruili07/p/9831819.html