精华内容
下载资源
问答
  • 2022-02-08 14:01:26

    问题

    lidar slam是用C++开的程序,但是整体pipeline是用pyhon开发的,为了将lidar pose集成到整体的pipeline中,需要用python调用c++程序,并打包到wheel文件中,交付给下游使用。具体需要解决以下问题:

    1. 要打包为wheel包,然后python能够调用c++的程序。
    2. c++程序依赖第三方库,比如pcl\ros\boost\opencv\jsoncpp等,打包到wheel中后,依赖项要尽量简化,方便下游安装使用。

    pybind11

    遇到的一些问题
    docker image中编译不成功,
    是image中没有gcc和g++,apt-get即可。
    so中找不到定义,python文件,python文件实现的接口要和cpp对应。

    setup.py

    https://zhuanlan.zhihu.com/p/276461821

    pybind11调用c++版本opencv

    https://blog.csdn.net/heroacool/article/details/122887988?spm=1001.2014.3001.5501

    参考资料

    更多相关内容
  • 经典手眼标定算法C++代码

    热门讨论 2016-06-09 14:54:42
    经典手眼标定算法C++代码,程序是基于OpenCV 2.0以上版本,下载程序后需要配置OpenCV。工程主要包括三个文件,handeye.h为各种手眼标定的实现,quaternion.h为四元数运算文件,handeye_test.cpp为主程序,测试各手眼...
  • C++代码转java工具

    2016-03-10 12:50:03
    C++代码转java工具
  • C++代码转换成C#工具

    热门讨论 2013-10-03 15:35:06
    C++ to C# Converter 破解版(英文界面) 可以批量转换
  • OpenCV单目视觉定位(测量)C++代码

    热门讨论 2017-08-23 21:29:14
    OpenCV单目视觉定位(测量),能检测识别出自定义的物体标签,并计算出自定义物体距离摄像头光心的X,Y方向距离, 用于无人机/机器人视觉定位。
  • VScode c++ 代码自动补全/智能提示设置

    C/C++ 拓展

    从插件商店中安装完C/C++拓展插件之后其实就可以基本实现代码的自动提示与拓展功能了。
    VS code 官网效果图

    第三方库的提示问题

    然而,正当我开开心心的跟着SLAM14讲继续写代码的时候,我发现尽管c++一些官方库的内容都能较好的提示了,但程序中使用的Eigen、Sophus等第三方库的内容却没有相应的功能。
    进行了百度和一系列摸索之后发现,vs code中的智能提示对于第三方库需要手动添加路径:在Command Palette (Ctrl+Shift+P)中,输入C/C++: Edit Configurations (UI) 即可进入到可视化的c/c++设置中,其中有一条“包含路径”的设置。在命令行中通过locate指令查找到所需的第三方库的路径并添加进设置中后,重新启动vs code就有对应的代码提示啦!

    vs code 路径设置
    添加路径之后的效果

    命名空间后没有提示

    但是此时在命名空间的冒号后却空空如也,完全依赖于手动编写内容,与其他地方完美的提示格格不入。在仔细浏览设置页面的内容后,将c++标准从默认的c++98改到了c++17之后就迎刃而解了。

    修改c++标准

    CMake自动提示功能

    在vs code的CMake tools文档中看到这么一段话,也就是说理论上使用了CMake的项目里的include路径会在configure之后自动的提供给cpptools。
    把之前添加的路径直接删除,使用configure命令配置后确实也实现了自动补全的功能,省事了真好~
    CMake tools文档

    展开全文
  • android studio 调用C++代码

    千次阅读 2022-04-17 16:45:04
    Android studio调用C++代码 JNI原理 JNI(Java Native Interface)叫做JAVA本地接口。 JAVA是一种跨平台的语言,这种特性依赖的是Java虚拟机,虚拟机由C/C++编写。适配各个系统,通过JNI为上层的JAVA应用提供各种服务...

    Android studio调用C++代码

    JNI原理

    JNI(Java Native Interface)叫做JAVA本地接口。

    JAVA是一种跨平台的语言,这种特性依赖的是Java虚拟机,虚拟机由C/C++编写。适配各个系统,通过JNI为上层的JAVA应用提供各种服务,保证跨平台性。

    JNI查找

    Android系统在启动启动过程中,先启动Kernel创建init进程,紧接着由init进程fork第一个横穿Java和C/C++的进程,即Zygote进程。Zygote启动过程中会AndroidRuntime.cpp中的startVm创建虚拟机,VM创建完成后,紧接着调用startReg完成虚拟机中的JNI方法注册。

    Java层怎么去找到相应的native代码的相应位置

    package android.os;
    public final class MessageQueue {
        private native void nativePollOnce(long ptr, int timeoutMillis);
    }
    

    步骤1: MessageQueue.java的全限定名为android.os.MessageQueue.java,完整的方法名为android.os.MessageQueue.nativePollOnce(),与之相对应的native层方法名是将点号替换为下划线,即android_os_MessageQueue_nativePollOnce()。

    步骤2: 有了native方法,那么接下来需要知道该native方法所在那个文件。前面已经介绍过Android系统启动时就已经注册了大量的JNI方法,见AndroidRuntime.cpp的gRegJNI数组。这些注册方法命令方式:

    register_[包名]_[类名]
    

    那么MessageQueue.java所定义的jni注册方法名应该是register_android_os_MessageQueue,的确存在于gRegJNI数组,说明这次JNI注册过程是在开机过程完成。 该方法在AndroidRuntime.cpp申明为extern方法:

    extern int register_android_os_MessageQueue(JNIEnv* env);
    

    这些extern方法绝大多数位于/framework/base/core/jni/目录,大多数情况下native文件命名方式:

    [包名]_[类名].cpp
    [包名]_[类名].h
    

    Tips: /android/os路径下的MessageQueue.java ==> android_os_MessageQueue.cpp

    打开android_os_MessageQueue.cpp文件,搜索android_os_MessageQueue_nativePollOnce方法,这便找到了目标方法:

    static void android_os_MessageQueue_nativePollOnce(JNIEnv* env, jobject obj, jlong ptr, jint timeoutMillis) {
        NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);
        nativeMessageQueue->pollOnce(env, obj, timeoutMillis);
    }
    

    到这里完成了一次从Java层方法搜索到所对应的C++方法的过程。

    Android studio调用c++

    构建流程

    首先创建一个Native C++的工程

    就会发现IDE为我们自动生了一系列文件。这里讲一下重点的几个文件

    app/src/java里面存放点是java源代码。app/src/cpp存放的是c++源代码

    cpp目录下面有CMakeLists.txt文件,里面包含着动态库生成的规则设置。

    add_library( # Sets the name of the library.
            jin_text
    
            # Sets the library as a shared library.
            SHARED
    
            # Provides a relative path to your source file(s).
            native-lib.cpp)
    

    app下面的项目build、gradle如下

    plugins {
        id 'com.android.application'
    }
    
    android {
        compileSdk 32
    
        defaultConfig {
            applicationId "com.example.jin_text"
            minSdk 23
            targetSdk 32
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            externalNativeBuild {
                cmake {
                    cppFlags '-std=c++11'
                }
            }
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        externalNativeBuild {
            cmake {
                path file('src/main/cpp/CMakeLists.txt')
                version '3.18.1'
            }
        }
        buildFeatures {
            viewBinding true
        }
    }
    
    dependencies {
    
        implementation 'androidx.appcompat:appcompat:1.4.1'
        implementation 'com.google.android.material:material:1.5.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
        testImplementation 'junit:junit:4.13.2'
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    }
    

    Plugiuns 是使用的插件,一般有两个

    • ‘com.android.application’,表示该模块为应用程序模块,可以直接运行,打包得到的是.apk文件
    • ‘com.android.library’,表示该模块为库模块,只能作为代码库依附于别的应用程序模块来运行,打包得到的是.aar文件

    android是一个闭包。配置项目的各种属性

    具体闭包功能可以自己百度。

    Implementation 远程依赖声明。

    之后只需要编写JNI接口(可以使用javah)生成,之后就可以调用C++代码。

    Gradle

    Gradle是一个架构项目的框架,真正起作用的还是plugin。Gradle中主要有两个对象Project和Task。其中Project为Task提供了上下文。Gradle脚本采用groovy书写。

    Gradle的构建由一个或者多个project构成,每个project可以构建成你想要的样子,比如web应用、jar包等。

    每个projext都是由多个Tasks组成的,每个task都代表着构建过程中的一个原子操作(编译、打包等)

    Gradle的执行是分为两个阶段

    1. 配置阶段,读取所有build.gradle的内容来配置project和task等。
    2. 执行阶段
    • Gradle为每个build.gradle都会创建一个相应的Project领域对象,在编写Gradle脚本时,我们实际上是在操作诸如Project这样的Gradle领域对象。在多Project的项目中,我们会操作多个Project领域对象。Gradle提供了强大的多Project构建支持。
    • 要创建多Project的Gradle项目,我们首先需要在根(Root)Project中加入名为settings.gradle的配置文件,该文件应该包含各个子Project的名称。Gradle中的Project可以简单的映射为AndroidStudio中的Module。
    • 在最外层的build.gradle。一般干得活是:配置其他子Project的。比如为子Project添加一些属性。
    • 在项目根目录下有个一个名为settings.gradle。这个文件很重要,名字必须是settings.gradle。它里边用来告诉Gradle,这个multiprojects包含多少个子Project(可以理解为AndroidStudio中Module)。

    参考链接

    链接1

    展开全文
  • 多目标跟踪c++代码

    热门讨论 2014-04-08 22:52:51
    代码使用vs2010 + opencv2.2开发,可以检测目标、跟踪多个目标
  • C++代码审查工具Cppcheck和TscanCode

    千次阅读 2022-05-05 15:01:02
    之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。TScanCode 比较适用于游戏开发代码扫描,有着不错的准确率和效率。

    cppcheck简介

    cppcheck 是一个静态代码检查工具,支持c、c++ 代码。作为编译器的一种补充检查,cppcheck对源代码执行严格的逻辑检查。

    助力开发与测试工程师从代码层面挖掘问题,聚焦于包括逻辑错误、可疑的代码、运算错误、空指针、越界错误、内存泄漏这6个类,52个小类的代码异常。

    相比其他的静态检查工具,cppcheck具有简单易上手、执行快、开源等优点。

    执行的检查包括:
       1.  自动变量检查
       2.  数组的边界检查
       3.  class类检查
       4.  过期的函数,废弃函数调用检查
       5.  异常内存使用,释放检查
       6.  内存泄漏检查,主要是通过内存引用指针
       7.  操作系统资源释放检查,中断,文件描述符等
       8.  异常STL 函数使用检查
       9.  代码格式错误,以及性能因素检查

    默认用法

    $cppcheck --enable=all test.cpp 
    $cppcheck --enable=all ./src 

    使用选项–output-file将结果存储在report.txt中。

    也可以用输出重定向:

    $cppcheck --enable=all test.cpp 2> report.txt

    cppcheck安装

    官网地址:Cppcheck - A tool for static C/C++ code analysis

    安装十分简便,只需在官网下载最新的可执行安装包(目前为cppcheck-2.7-x64-Setup.msi)跟着向导「下一步」即可。 

    运行结果对94个例子的分析十分到位,只不过底侧的代码预览对中文注释似乎不太友好。 

    除了GUI,Cppcheck还支持与多种IDE(如VS、Eclipse、QtCreator等)、版本管理系统(如Tortoise SVN、Git)集成使用。

    可对每次分析进行配置甚至自定义规则,并作为项目文件进行保存或重载。

    分析的结果报告可保存为格式化纯文本或XML,并可借助Python pygments将XML生成为HTML。

    两种工具对比

    检测能力:Cppcheck > TscanCode

    易用性:TscanCode > Cppcheck 

    不是说cppCheck就绝对占优,它在某些情况下可能存在误报。

    下面再介绍款腾讯开源的TscanCode。

    TscanCode介绍

    TscanCode 是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。TScanCode 比较适用于游戏开发代码扫描,有着不错的准确率和效率。
    TscanCode 主要能够发现的问题如下:
    1、自动变量检查: 返回自动变量(局部变量)指针;
    2、越界检查:数组越界返回自动变量(局部变量)指针;
    3、类检查:构造函数初始化;
    4、内存泄露检查;
    5、空指针检查;
    6、废弃函数检查;

    主流代码审查工具

    C++静态代码分析工具(cppcheck、coverity、clang、pclint)。

     其性能测试可以见:https://blog.csdn.net/wetest_tencent/article/details/51516347。

    TScanCode安装

    TscanCode 已经在 Github 上开源。

    代码仓库为:GitHub - Tencent/TscanCode: A static code analyzer for C++, C#, Lua, 我们可以自己下载下来编译,也可以使用腾讯预编译好的可执行文件(代码仓库的 release 目录)。

    release	->编译后的二进制文件,分别有Linux、Mac、Windows平台
    samples	->测试的代码样例,分别有C++、C#、Lua语言
    trunk		->TscanCode源代码
    

    windows平台下:

    注(windows平台下,截至目前gtihub的release目录里去掉了原windows的安装包,要想使用可以网上找下载安装TscanCodeV2.14.24.windows.exe。后面评论区有下载链接)

    win_tscancode_1

    扫描项目,导入即可,即可以导入一个文件夹,也可以导入单个文件。

    对于扫描后的结果,可以保存为 xml 配置文件,方便下一次直接在主界上直接使用。(打开->结果查看,选中该文件即可。)
    还可以在设置中选择扫描规则,每个规则都有对应的代码实例可供参考。 

    win_tscancode_4

    linux平台下:

    第一种:
    $ git clone https://github.com/Tencent/TscanCode.git
    $ cd TscanCode/release/linux/
    $ unzip TscanCodeV2.14.24.linux.zip 
    $ cd TscanCodeV2.14.24.linux/TscanCodeV2.14.2395.linux
    $ chmod a+x tscancode 
    $ echo "PATH=$PATH:$(pwd)" >> ~/.bashrc
    $ source ~/.bashrc
    
    第二种,建议使用:
    cd trunk/
    make
    修改cfg/cfg.xml  #cfg.xml 配置不当,可能导致检测结果为空,建议value="0"的再开启一些
    ./tscancode --xml --enable=all -q /home/yang/test/cpp/ >scan_result.xml 2>&1
    

    扫描规则与配置

    代码安全静态扫描工具TscanCode支持多平台运行,包括Linux、Windows版本。

    在Linux下可通过cfg/cfg.xml对扫描的规则进行配置,
    其中通过设置value=0则禁用,value=1则启用。

    根据需要定制扫描规则,编辑规则配置文件cfg/cfg.xml,或直接使用默认的扫描规则。

    将源代码放到指定路径下${SRC_CODE}(路径中不能包含root文件夹,TscanCode特殊性)。
    如,export SRC_CODE=~/myprj/mysource/

    执行代码扫描

    ./tscancode --xml --enable=all -q ${SRC_CODE} >scan_result.xml 2>&1

    TscanCode会将结果按照固定的XML格式写入文件中。

    选择Excel工具打开XML报告(为了处理更直观),在左侧插入一列处理情况。
    开发人员根据报告对代码上下文进行分析,判断是否为工具误报。
    对于确认为问题的代码,由开发人员处理后重新进行代码安全静态扫描,直到问题关闭。

    其他的一些工具

    Valgrind是开放源代码(GPL V2)的仿真调试工具的集合,支持Linux操作系统。它的功能同样强大:

    1)Memcheck:重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等;

    2)Callgrind:检查程序中函数调用过程中出现的问题,也可以用于性能调优;

    3)Cachegrind:检查程序中缓存使用出现的问题;

    4)Helgrind:检查多线程程序中出现的竞争问题;

    5)Massif:检查程序中堆栈使用中出现的问题;

    6)Extension:编写特定的内存调试工具。

    推荐几个常用的在线c++代码测试网站

    OnlineGDB

    Url:https://www.onlinegdb.com/

    C++ ShellC++ Shell

    Url:http://cpp.sh/

    Online PHP/Java/C++... editor and compiler | paiza.IO

    引用

    静态代码扫描工具汇总_while_false_的博客-CSDN博客_静态代码扫描工具

    TscanCode C/C++静态分析开源分析工具安装与使用_lwblovezj的博客-CSDN博客_tscancode

    SPrinter:一个基于Clang-Tidy的C++程序智能指针错误检查工具_ithiker的博客-CSDN博客

    C++代码自动检测工具clang-format和clang-tidy_长星照耀十三州府_的博客-CSDN博客

    TscanCode代码扫描工具_code_peak的博客-CSDN博客_tscancode

    代码扫描工具TScanCode - yusq77 - 博客园

    C/C++代码静态分析工具调研

    研发工具,你用对了吗?

    Windows下 Cppcheck 的使用教程_hellokandy的博客-CSDN博客_cppcheck

    C/C++代码静态分析工具调研 - 简书

    C++代码质量扫描主流工具深度比较 - 51Testing软件测试网-中国软件测试人的精神家园

    C++代码静态检测 - 威海云博客 - 博客园

    展开全文
  • C++代码缩进

    千次阅读 2020-10-25 00:06:56
    C++几种常见代码缩进风格&样式 foreword 使用 Tab 做缩进 或者使用空格 但尽量统一 只适用一种方式 通常我设置 一个 Tab 四个空格 但Tab 不转化为空格 不过 Google 的规范是: 只使用空格 一次两个空格 不用...
  • 程序静态分析(Program static analysis)是指在不执行代码情况下, 通过词法分析、语法分析、语义分析、控制流、数据流分析等技术对源代码进行扫描。
  • C++代码注释详解

    千次阅读 2020-09-30 10:50:08
    mouse events mouse move event mouse click event 分组注释 对于某几个功能类似的代码项(比如类、函数、变量)等,如果希望一起添加注释,而又不想提升到模块的概念,可以通过下面的方式: /** * @name 组名 组的...
  • B+树C++代码实现

    热门讨论 2013-01-01 18:26:00
    一个外国人写的B+树算法,由于注释比较少,故个人在参照时加上了自己的注释。该代码还用带了LRR和折半查找技术,很值得参考学习!!
  • 【C/C++】C++代码质量检核工具-cppcheck

    千次阅读 2021-09-06 14:05:02
    【C/C++】C++代码质量检核工具-cppcheck cppcheck 介绍 Cppcheck是一个用于C/C++代码的静态分析工具。它提供独特的代码分析来检测bug,并侧重于检测未定义的行为和危险的编码结构。 常用检查项如下所示: 检查边界...
  • m2cgen score函数 python训练模型转c++ 逻辑回归多分类 sklearn
  • VSCode C++代码提示和补全

    千次阅读 2022-03-24 17:29:02
    网上都说安装完扩展C/C++ Extension就可以了,但我这儿不行,发现是因为需要自己另外提供头文件,于是利用了mingw的头文件。 1、解压i686-4.9.3-release-posix-dwarf-rt_v4-rev1.7z至C:\mingw32 2、在VSCode中按...
  • C++实现H264编码视频封装成avi/mp4文件
  • 二叉树遍历的C++代码实现

    万次阅读 热门讨论 2021-04-24 22:33:40
    广度优先遍历二叉树: void levelorder() //广度优先遍历二叉树 { queue<binarytreenode<T> *> nodequeue; binarytreenode<T> *pointer=root; if(pointer) ...nodequeue.empty())
  • C++代码启动程序关闭程序

    热门讨论 2012-02-08 22:13:05
    C++代码启动程序关闭程序,采用C++代码的行驶启动和关闭对应的软件。
  • Matlab程序转为C++代码

    千次阅读 2021-03-05 18:44:41
    Matlab程序转为C++代码 实验室项目需要,将Matlab程序转为C++代码的过程记录下来,方便后续查找和别人使用。 ## 前言 ##
  • Java代码转C++代码的几点小经验

    千次阅读 2020-12-04 21:44:53
    C++ 和 Java太像了,其实翻译起来 还挺爽快,但有些小坑 知道了可能更好
  • c++代码小游戏

    千次阅读 2020-08-30 15:34:05
    这是我的第二个小游戏,很简单,不,应该是特别简单。 猜猜这是什么游戏?对了,就是猜数字。 是不是很简单 #include<iostream> #include<cstdlib> #include<ctime>..."你要猜
  • C++代码静态检测

    万次阅读 2019-01-18 23:42:49
    C++代码静态检测一,CppCheck(下载地址:http://cppcheck.net/)1,使用CppCheck客户端检测2,在vs中使用CppCheck二,TscanCode(下载地址:https://github.com/Tencent/TscanCode)三,PVS-studio(下载地址:...
  • 银行家算法C++代码实现

    千次阅读 2022-04-07 17:15:07
    闲言少叙,直接上代码 #include <bits/stdc++.h> using namespace std; const int maxn=1001; int Max[maxn][maxn],Allocation[maxn][maxn],Need[maxn][maxn]; int Available[maxn],Work[maxn],Request[maxn...
  • c++代码示例及其他

    千次阅读 2020-03-29 13:14:10
    0.1、c++11范围for 即:for (auto n : arr) 0.2、c++中宏的字符化操作(#@) 0.3、c++中宏的标记连接操作(##) 0.4、c++中宏的字符串化操作(#) 0.5、c++中 a++和++a的区别 0.6、c++中的运算符的替代表示 0.7、c++中同一...
  • 由于电脑内存不足将 Clion 给卸载了,现在只能用 Vim 来编写 C++ 代码了。但是每次写完代码之后都需要经过「编译g++ test.cpp」和「执行./a.out」两步操作,感觉用起来比较繁琐。于是,我有了用 Shell 将这两条命令...
  • 使用vscode编写C/C++代码

    千次阅读 2020-07-16 14:15:59
    使用vscode编写C/C++代码(官网简单版) 官网下载vscode vscode官网 下载c++编译器MinGW MinGW官网下载地址 开始安装 安装MinGW 找到安装目录下的bin目录(C:\MinGW\bin),添加到系统环境变量(win7举例...
  • C++代码:求均值

    千次阅读 2021-07-12 19:59:07
    题目描述 给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。 输入 输入有两行,第一行包含一个整数n(n小于100...呵呵,代码如下: #include<bits/stdc++.h> using namespace std; int ma..
  • Python调用C++代码

    千次阅读 2018-09-07 06:13:23
    Python调用C++代码 今天在研究PyTorch中Tensor的一些操作的时候,发现其底层Tensor的操作都是用C++写的,并使用pybind11进行C++和Python的桥接。所以,我就想着探索一下Python中如何调用C++代码? 可行方案 ...
  • 使用vs code 运行与调试c++代码

    千次阅读 2019-10-17 13:59:57
    参考文章: ...安装好下面两个插件 C/C++ Code runner 如果需要中文请安装一个chinese插件 code runner插件默认的c/c++编译器是gcc/g++,需要提前安装好并且设置好环境变量,通常选择MinGW或者MinGW-w64,建议选mi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,875,278
精华内容 750,111
关键字:

c++代码

c++ 订阅
友情链接: LED数字时钟代码.zip