美文网首页
Coverity 工具静态扫描 QT 项目实践

Coverity 工具静态扫描 QT 项目实践

作者: 猫咪不吃鱼 | 来源:发表于2022-01-21 16:36 被阅读0次

    一、前言

    本文同样不讲述 Coverity 工具的安装和部署,只记录在扫描 QT 项目的过程和遇到的问题。QT 项目的开发可以有多种方式,例如:在自带的 QT Creator 上,再者可在 Visual Studio 上配置相应的插件,本文所实践的项目即是采用的后者。

    二、实践场景描述及配置

    纯净的设备环境下,去扫描 QT 工程,并将结果上传到 Coverity 后台,因此需要配置 QT 项目的编译环境 qmake

    这里以 Ubuntu 系统为例,直接使用命令行安装即可:

    sudo apt-get install cmake qt5-default qtcreator
    

    安装完成之后,输入 qmake -v 进行验证,如出现如下情况则安装成功:

    $ qmake -v
    QMake version 3.1
    Using Qt version 5.11.3 in /usr/lib/x86_64-linux-gnu
    

    三、编译过程

    1、生成 .pro 文件

    qmake -project
    

    2、根据 .pro 文件生成 Makefile

    qmake
    

    注意生成的 Makefile 文件中可能有些库文件没有链接进去,因此需要手动添加进入

    3、编译项目

    make
    

    一切顺利的话,会根据 Makefile 中的规则生成对应的文件,至此编译成功

    四、Coverity 指令

    相关指令参数介绍,参见 Coverity 工具静态扫描Android项目实践

    make clean
    cov-configure --comptype g++ --compiler g++ --template
    cov-build --dir result make -j
    cov-analyze --dir result --all
    cov-commit-defects --stream authorize_v_1.0 --host 10.212.xxx.xxx --port 8081 --user zsk --password zskqq123 --dir result
    

    五、注意事项

    1、Linux 系统下编译时链接的库为 .a 而不是 .lib
    2、qmake 根据 .pro 文件生成的 Makefile 中有些头文件和库没有包含进去,可以根据编译时打印的日志手动添加
    3、一般在 LIBS 下指定链接库,形如包含与 Makefile 同级目录下的 lib64 文件夹下的 libslm_runtime.so/.a,则可以表示为:

    # 注意 -L : 表示递归目录  -l : 表示是库 ,libslm_runtime.a 不带前缀和扩展,表示为 slm_runtime 
    LIBS = -L./lib64 -lslm_runtime
    

    4、假如编译生成的是一个二进制可执行文件,名字为 authorize,可以采用如下命令来检查该执行文件运行所需要的链接库是否完整:

    ldd authorize
    

    假如出现:xxx.so:not found,则表明 authorize 在运行时没有在系统环境中找到该 xxx.so 文件,因此需要在系统环境中配置 LD_LIBRARY_PATH :

    /etc/profile 中追加如下命令:

    # LD_LIBRARY_PATH 指向 xxx.so 所在的目录
    export LD_LIBRARY_PATH=/usr/zsk/opt/lib64:$PATH
    

    相关文章

      网友评论

          本文标题:Coverity 工具静态扫描 QT 项目实践

          本文链接:https://www.haomeiwen.com/subject/yiiehrtx.html