RK3568应用开发准备

尝试本地编译+ssh remote开发

尝试本地编译helloworld

  1. 开发板上下载gcc
    • apt-get install gcc
    • gcc --version查看一下是否正常安装
  2. 编写简单的c程序
#include 
int main(){
	printf("hello world\n");
	printf("hello world\n");
	printf("hello world\n");
	return 0;
};

  1. 编译hello.c
    • gcc hello.c
    • 编译这个简单的程序还挺快的
  2. 查看编译好的程序的输出
    • ./a.out
    • 输出正常,可行

尝试调用usr/lib下已经有的gstreamer

  1. 寻找gstreamer例程1
  2. 发现已有的是libgstreamer1.0-0,而应用程序开发需要的库是libgstreamer1.0-dev2
  3. 安装libgstreamer1.0-dev
    • apt-get install libgstreamer1.0-dev
  4. 更换后成功执行引用
    1. #include
    2. gcc hello.c `pkg-config --cflags --libs gstreamer-1.0`
  5. 继续写作gstreamer例程
#include 

int main (int argc, char *argv[])
{
  GstElement *pipeline;
  GstBus *bus;
  GstMessage *msg;

  /* Initialize GStreamer */
  gst_init (&argc, &argv);

  /* Build the pipeline */
  pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);

  /* Start playing */
  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  /* Wait until error or EOS */
  bus = gst_element_get_bus (pipeline);
  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
      GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

  /* Free resources */
  if (msg != NULL)
    gst_message_unref (msg);
  gst_object_unref (bus);
  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);
  return 0;
}

尝试安装并调用opencv

  1. 安装opencv库
    • apt-get install libopencv-dev
    • 系统盘空间不够大了,进行扩容resize2fs /dev/mmcblk0p6
  2. 下载g++
    • apt-get install g++
  3. 写opencv例程并编译运行
    • g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
    • 成功处理与显示图片
  4. 测试是否可以调用摄像头
    1. gst-launch-1.0 rkisp io-mode=1 path-iqf=/etc/cam_iq/rk-ov4689.xml ! video/x-raw,format=NV12,width=740 ,height=360,framerate=30/1 ! videoconvert ! appsink
    2. 报错,WARNING: erroneous pipeline: no element “rkisp”,也就是不存在插件,安装此插件
    3. 应该可以不用rkisp
    4. 写作demo,发现现在的opencv无法打开gstreamer链接
  5. 进行其他尝试,直接自己编一个库出来
    1. cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/root/Desktop/libs/opencv -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_GSTREAMER=ON -D WITH_GTK=ON -D WITH_GTHREAD=ON -D WITH_TBB=ON -DWITH_OPENGL=ON -D OPENCV_GENERATE_PKGCONFIG=ON …

交叉编译opencv库

  1. 瑞芯微rk3568中 编译opencv并配置环境变量_专栏_易百纳技术社区 (ebaina.com)
    1. ubuntu16.04 IMAX8编译opencv3.3.1_小白clever的博客-CSDN博客
    2. MultiCol-SLAM Android NDK 交叉编译问题记录 - 走看看 (zoukankan.com)
  2. RK3399编译x264/FFMPEG/OPENCV支持MP4视频格式_再__努力1点的博客-CSDN博客
  3. 直接编译opencv应用,可以直接下载库(二十一)实践出真知——opecv调取摄像头、使用gstreamer访问mipi摄像头 - 知乎 (zhihu.com)
    1. 编译过程中发现缺失动态库,在交叉编译工具链下未找到对应的文件,因此要自己编译解决Linux系统下(交叉)编译出现“cannot find -lxxx”的错误 (ubuntu)_liang_qincan的博客-程序员宝宝 - 程序员宝宝 (cxybb.com)
    2. 最后发现其实系统库里有这些,那就直接拿来用了
    3. 引入第三方库,需要自己生成一下软链接Clion(CMake工具)中引入第三方库的详细方法_C 语言_脚本之家 (jb51.net)
    4. cmake使用-指定交叉编译链_monkey_lqd的博客-CSDN博客_cmake 指定交叉编译器
  4. 编译基于gstreamer的opencv(1条消息) rk3399上opencv使用gstreamer访问mipi摄像头_yuanlulu的博客-CSDN博客
  5. OpenCV与gstreamer的理解http://www.360doc.cn/mip/997169119.html
  6. 此处未成功,之后再来

VSCODE SSH调试

  1. vscode通过ssh远程配置c++编译及调试(多文件)_思禾的博客-CSDN博客_vscode 远程编译
  2. VS Code 运行C++程序以及TASKS.JSON和LAUNCH.JSON文件的基础配置_竹剑单的博客-CSDN博客_tasks.json
  3. vscode cmake 调试
    1. g++编译参数—CMake详细使用教程—Linux–基于VSCode和CMake实现C/C++开发–笔记_方池安夏的博客-CSDN博客
    2. 【vscode】【c/cpp】cmake工程 remoteSSH远程调试代码_杰克十里温的博客-CSDN博客
    3. VSCode在win下远程调试linux(cmake)(c/c++) - 知乎 (zhihu.com)
  4. 最终实现主要写作三个文件
    1. CMakeLists.txt3
    2. tasks.json4
    3. launch.json5

附录


  1. GStreamer 入门 - Hello,World - 简书 (jianshu.com) ↩︎

  2. GStreamer 应用编译_君君大虾的博客-CSDN博客_gstreamer 编译 ↩︎

  3. #指定CMake的最小版本要求
    
    cmake_minimum_required(VERSION 2.8)
    
      
    
    #定义工程名称
    
    project(collect_demo)
    
      
    
    #当前编译选项后追加新编译选项
    
    #注意这里加了-g,才能进行gdb调试
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -Wall -std=c++11")
    
      
    
    ################################################
    
    #############引入自己的头文件和库文件#############
    
    ################################################
    
    #定义头文件目录
    
    set(INC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/lib/include)
    
    #引用头文件
    
    include_directories(${INC_DIRS})
    
    #源文件
    
    FILE(GLOB_RECURSE SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/lib/src/*.cpp)
    
    ################################################
    
    #############引入自己的头文件和库文件#############
    
    ################################################
    
      
      
    
    ################################################
    
    #############引入第三方库文件####################
    
    ################################################
    
    #引用pkg-config库
    
    find_package(PkgConfig)
    
    #引用gstreamer库
    
    pkg_check_modules(GSTREAMER_1_0 gstreamer-1.0)
    
    include_directories(${GSTREAMER_1_0_INCLUDE_DIRS})
    
    link_directories(${GSTREAMER_1_0_LIBRARY_DIRS})
    
    ################################################
    
    #############引入第三方库文件####################
    
    ################################################
    
      
      
    
    #生成可执行文件(这里可执行文件名叫main_cmakeDemo),其他的是工程里包含的文件
    
    add_executable(collect_demo main.cpp ${SRC_FILES})
    
      
    
    #链接gstreamer库
    
    target_link_libraries(collect_demo ${GSTREAMER_1_0_LIBRARIES})
    
    #链接pthread库
    
    target_link_libraries(collect_demo pthread)
    
    ↩︎
  4. {
        "tasks": [
    
            {
    
                "type": "cppbuild",
    
                "label": "cppbuild",
    
                "command": "/usr/bin/g++",
    
                "args": [
    
                    "-fdiagnostics-color=always",
    
                    "-g",
    
                    "${file}",
    
                    "${workspaceFolder}/lib/src/*",
    
                    "-o",
    
                    "${fileDirname}/output/${fileBasenameNoExtension}",
    
                    "-I",
    
                    "${workspaceFolder}/lib/include",
    
                    "-lpthread",
    
                    "`pkg-config --cflags --libs gstreamer-1.0`"
    
                ],
    
                "options": {
    
                    "cwd": "${fileDirname}"
    
                },
    
                "problemMatcher": [
    
                    "$gcc"
    
                ],
    
                "group": {
    
                    "kind": "build",
    
                    "isDefault": true
    
                },
    
                "detail": "调试器生成的任务。"
    
            },
    
            {
    
                "label": "cmake",
    
                "type": "shell",
    
                "command": "cmake",
    
                "args": ["../"],
    
                "options": {
    
                    "cwd": "${workspaceFolder}/build"
    
                }
    
            },
    
            {
    
                "label": "make",
    
                "type": "shell",
    
                "command": "make",
    
                "args": ["-j2"],
    
                "options": {
    
                    "cwd": "${workspaceFolder}/build"
    
                }
    
            },
    
            {
    
                "label": "build",
    
                "dependsOn":["cmake", "make"]
    
            }
    
        ],
        "version": "2.0.0"
    }
    
    ↩︎
  5. {
    
        // 使用 IntelliSense 了解相关属性。
    
        // 悬停以查看现有属性的描述。
    
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    
        "version": "0.2.0",
    
        "configurations": [
    
                {
    
                    "name": "(gdb) Launch", //配置名称,会在启动配置的下拉菜单中显示
    
                    "type": "cppdbg", //配置类型,只能为cppdbg
    
                    "request": "launch", //请求类型,可以为launch或attach
    
                    "program": "${workspaceFolder}/build/collect_demo", //将要调试的程序的路径
    
                    "args": [], //调试时传递给程序的命令行参数
    
                    "stopAtEntry": false, //设为true程序会暂停在入口处
    
                    "cwd": "${workspaceFolder}/build", //调试程序时的工作目录
    
                    "environment": [], //环境变量
    
                    "externalConsole": false, //调试时是否显示控制台窗口
    
                    "MIMode": "gdb", //指定连接的调试器,可以为gdb或lldb
    
                    "miDebuggerPath": "/usr/bin/gdb", //gdb路径
    
                    "setupCommands": [
    
                        {
    
                            "description": "Enable pretty-printing for gdb",
    
                            "text": "-enable-pretty-printing",
    
                            "ignoreFailures": true
    
                        }
    
                    ]
    
                    ,"preLaunchTask": "build" //调试开始前执行的任务,一般为编译过程,会调用tasks.json里面的任务,调试过程中没有代码改动的话可以注释掉
    
                    //,"preLaunchTask": "build" //调试过程中没有代码改动的话可以注释掉,像这样
    
                }
    
        ]
    
    }
    
    ↩︎

你可能感兴趣的:(opencv,c++,vscode,linux,单片机)