提问人:Zhmel 提问时间:3/21/2022 最后编辑:Zhmel 更新时间:3/23/2022 访问量:575
编译时的 OpenCV g++ 未定义引用在一台机器上有效,但在另一台机器上无效 [重复]
OpenCV g++ undefined reference when compiling works in one machine but not in another [duplicate]
问:
我面临着显然非常典型的未定义引用,OpenCV 与 g++ 链接。我在两台机器上运行,都安装了 opencv/2.3.14.6,linux 操作系统,使用 pkg-config 编译相同的代码。我检查了'pkg-config opencv --libs',两者的结果相同
-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl
它失败的机器是 CentOS Linux 版本 7.9.2009(将称之为 centos 机器),编译通过 Linux 版本 4.19.0-9-amd64(将称之为 debian 机器)。
在我的代码中,我使用 ,它应该包括所有 opencv 库,但是,我尝试也包括特定的库,相同的结果,debian 机器都很好,centos 机器失败了。我什至尝试运行 OpenCV 文档中的一个示例,其中使用了我标记的大多数功能,得到了相同的结果。这是错误堆栈的一部分,imread、imshow、namedwindow 和 videowriter 也犯了同样的错误,其他一切似乎都很好:#include <opencv2/opencv.hpp>
test.cpp:(.text+0x1af4):对“cv::p utText(cv::Mat&, std::cxx11::basic_string<char, std::char_traits, std::allocator > const&, cv::P oint, int, double, cv::Scalar, int, int, bool)' 的未定义引用
我检查了所有这些函数都存在于所包含的库中,例如,putText 包含在 opencv2/core/core.hpp 中
CV_EXPORTS_W void putText( Mat& img, const string& text, Point org, int fontFace、double fontScale、标量颜色、 int 厚度=1, int lineType=8, bool bottomLeftOrigin=false );
这是我用来编译的命令行
g++ -Wall -std=c++11 -o test test.cpp `pkg-config --cflags --libs opencv`
为了以防万一,还尝试了下一个
g++ -Wall -std=c++11 -o test test.cpp `pkg-config opencv --cflags --libs`
而这个
g++ -Wall -std=c++11 -o test test.cpp $(pkg-config opencv --cflags --libs)
还尝试用直接库列表替换,仍然无法在 centos 机器中编译,我确实需要在 centos 机器中运行,但无法,我检查过的大多数帖子都通过添加缺少命令行、要编译的文件中的代码语法错误、缺少文件或重新安装 opencv 来解决,但这些都没有帮助我。还尝试使用此处推荐的不同 gcc 版本,但结果相同。我想知道我是否可以尝试其他方法,或者我是否注定要使用 debian 机器(centos 机器是一台 HPC 机器,代码需要一周才能在 debian 机器上运行!pkg-config opencv --cflags --libs
pkg-config opencv --cflags --libs
编辑:对于任何有类似问题的人,请参阅评论并检查双 ABI,就我而言,我正在尝试使用使用不同 gcc 版本编译的外部库,解决方案是确保它们都使用兼容的编译器版本进行编译。
答: 暂无答案
评论
cv::putText
opencv2/imgproc.hpp