如何在调试构建和调试中使用opencv-debuginfo软件包?

时间:2018-08-13 13:37:55

标签: opencv makefile linker gnu-make pkg-config

我过去几次使用过opencv,但是今天我不知道如何使用opencv-debuginfo packge。我正在使用CentOS 6.9。 centos的opencv版本仍然是2.0.0。我可以使用opencv构建程序并正常运行。我正在分析一个程序,并在使用DDD(显示调试器)和gdb(在DDD内部),发现当文件存在并且cvLoadImage函数内部文件名更改时,cvLoadImage函数不起作用。我意识到,由于我没有opencv-debuginfo,因此该程序已链接到opencv发行版,并在opencv函数中引起此故障。我决定应该安装opencv-debuginfo并使用yum install opencv-debuginfo进行安装。
在Makefile中,我使用

LDFLAGS+= `pkg-config --libs opencv`
COMMON+= `pkg-config --cflags opencv`

在发布模式下有效。顺便说一下,pkg-config --libs opencv返回-lcxcore -lcv -lhighgui -lcvaux -lml,而pkg-config --cflags opencv返回-I/usr/include/opencv。我不使用-L选项提供库位置,因为我想系统会以某种方式知道库文件的位置。我可以看到他们在哪里使用rpm -ql opencv,它显示了

/usr/lib64/libcv.so.2.0
/usr/lib64/libcv.so.2.0.0
/usr/lib64/libcvaux.so.2.0
/usr/lib64/libcvaux.so.2.0.0
/usr/lib64/libcxcore.so.2.0
/usr/lib64/libcxcore.so.2.0.0
/usr/lib64/libhighgui.so.2.0
/usr/lib64/libhighgui.so.2.0.0
/usr/lib64/libml.so.2.0
/usr/lib64/libml.so.2.0.0

我的$ LD_LIBRARY_PATH是...:/ usr / lib64:/ usr / local / lib64:/ usr / lib:/ usr / local / lib:/ lib64:/ lib:...并且我有/ usr /lib64/pkgconfig/opencv.pc文件,其中显示

# Package Information for pkg-config

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir=${prefix}/include/opencv

Name: OpenCV
Description: Intel(R) Open Source Computer Vision Library
Version: 2.0.0
Libs: -L${libdir} -lcxcore -lcv -lhighgui -lcvaux -lml
Cflags: -I${includedir}

我检查了使用rpm -ql opencv-debuginfo的opencv-debuginfo安装了哪些文件,它显示了(我显示了一些与库相关的行)

/usr/lib/debug/.build-id/..
/usr/lib/debug/.build-id/..
-- many debug/.build-id files ..
/usr/lib/debug/usr/lib64
/usr/lib/debug/usr/lib64/libcv.so.2.0.0.debug
/usr/lib/debug/usr/lib64/libcv.so.2.0.debug
/usr/lib/debug/usr/lib64/libcv.so.debug
/usr/lib/debug/usr/lib64/libcvaux.so.2.0.0.debug
/usr/lib/debug/usr/lib64/libcvaux.so.2.0.debug
/usr/lib/debug/usr/lib64/libcvaux.so.debug
/usr/lib/debug/usr/lib64/libcxcore.so.2.0.0.debug
/usr/lib/debug/usr/lib64/libcxcore.so.2.0.debug
/usr/lib/debug/usr/lib64/libcxcore.so.debug
/usr/lib/debug/usr/lib64/libhighgui.so.2.0.0.debug
/usr/lib/debug/usr/lib64/libhighgui.so.2.0.debug
/usr/lib/debug/usr/lib64/libhighgui.so.debug
/usr/lib/debug/usr/lib64/libml.so.2.0.0.debug
/usr/lib/debug/usr/lib64/libml.so.2.0.debug
/usr/lib/debug/usr/lib64/libml.so.debug
...
many opencv source files under /usr/src/debug/OpenCV-2.0.0/src/
...

我记得某些库(例如Glibc?)是在安装-debuginfo软件包时,在以调试模式(使用-g选项)构建程序时自动使用的,但这次不是。
因此,我的问题是,要使用调试版本opencv,我应该在Makefile中进行哪些更改?我刚刚尝试过pkg-config --libs opencv-debuginfo,但它给了我以下信息:

Package opencv-debuginfo was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv-debuginfo.pc'
to the PKG_CONFIG_PATH environment variable

并且opencv-debuginfo软件包没有安装.pc文件。(我想库名没有变化,但是当库选项为-lhighgui时,make程序将查找libhighgui .so文件(通常是符号链接);或者,有没有办法使make program查找已安装在/usr/lib/debug/usr/lib64/libhighgui.so中的libhighgui.so.debug。 .debug?还是应该使用特定的-L选项来指示库目录位置?(在这种情况下,它是否会覆盖系统pkg config信息?)。我可以尝试这样做,但希望有人可以清楚地说明这种情况,并非常感谢。
谢谢!

0 个答案:

没有答案