OpenCV:使用imwrite()函数时无法编译

时间:2016-01-27 23:53:52

标签: c++ opencv compilation linker libstdc++

在我简单的第一个OpenCV应用程序中,我想保存cam所获得的帧,所以我正在使用imwrite()作为教程说。问题是,我无法编译,因为我收到此错误:

Undefined symbols for architecture x86_64:
"cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int,  std::allocator<int> > const&)", referenced from:
_main in video-87ad7a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在这里阅读一些帖子我发现这是一个关于使用的C ++标准库的问题,所以我添加了标志libstdc++但是以下内容:

g++ -stdlib=libstdc++ -I/usr/local/include -L/usr/local/lib/ -g -o binary video.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_stitching -lopencv_videoio -lopencv_videostab

还没有解决问题。我该怎么办?

更新 似乎this是解决方案。我不知道我失踪的该死的旗帜是什么

2 个答案:

答案 0 :(得分:9)

看起来你错过了&#39; -lopencv_imgcodecs&#39; imwrite()生活在哪里 请参阅OpenCV imgcodecs头文件here

答案 1 :(得分:0)

@Dufus Johnson提出的答案不完整。如评论中所述,当我将clang版本切换到r19.xx时,也会发生链接错误。我正在使用OpenCV 3.4.5,该共享库只有一个分发的共享库-libopencv_java3.so

如果我的目的是使用共享库,而opencv共享库是综合性的,为什么我应该链接到任何其他库?同样,我链接到的任何库都应在我的apk中处理,否则会导致运行时错误。

虽然我一直无法解决问题,但在新工具链下如何生成符号似乎是个问题,这就是为什么问题仍未解决的原因。现在将切换回NDK r16.1。