我前几天安装了Ubuntu,并使用apt-get安装build_essentials,opencv,highgui等.g是4.6.1,opencv似乎是2.1.0 ..我没有从源代码构建opencv ..
我们有一些使用opencv功能的软件.让我们假装源文件名为a.cpp和b.cpp.我编译成a.o和b.o然后将它们放入.so库(称之为libab.so).
最后,有一个带有main的文件(称之为z.cpp).我尝试从中构建一个可执行文件,但是我对cv :: stuff有很多“未定义的引用”错误.我的链接行看起来像这样:
g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
然后我得到未定义的引用错误(所有这些都是cv :: stuff).
有趣的是,如果我直接链接到我的.o文件,它就构建得很好.所以这:
g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
作品.
我读过的所有东西似乎暗示这可能是一个链接行排序问题,但我已经尝试了所有排序排列并得到同样的问题,所以我真的不认为它是我的问题,但我仍然可能是错的.任何人都有任何想法如何使用我的库来构建它,以及为什么如果我使用库中的完整.o文件成功构建,但无法使用库本身构建它会采取不同的行为?
您可以将以下标志传递给g:
`pkg-config --libs opencv`
例如:
g++ myprogram.cpp `pkg-config --libs opencv` -o myprogram
pkg-config为编译器提供有关库的信息.
你可以看看:
/usr/local/lib/pkgconfig/opencv.pc
该文件包含编译的所有相关信息:
prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include Name: OpenCV Description: Open Source Computer Vision Library Version: 2.3.1 Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann Cflags: -I${includedir_old} -I${includedir_new}