一、前言
本文同样不讲述 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
网友评论