我已经使用此命令安装了OpenCV 4.0.0
brew install hybridgroup/tools/opencv
我正在尝试编译一个简单程序,该程序将文件系统中的图像加载到cv::Mat
中。
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/ocl.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
int main() {
auto img = cv::imread("/Users/peter/Dektop/source.png");
return 0;
}
而且我不断收到此错误
x86_64体系结构的未定义符号:
“ cv :: imread(std :: __ cxx11 :: basic_string, std :: allocator> const&,int)“,引用自: ccw6DQpj.o中的_main ld:找不到体系结构x86_64 collect2的符号:错误:ld返回1退出状态
我正在使用此命令进行编译。 GCC 8.2.0。
g++-8 main.cpp -std=c++17 `pkg-config --cflags --libs opencv4`
答案 0 :(得分:1)
鉴于评论中的答案,您拥有STL的二进制不兼容版本。
OpenCV4使用libc ++构建,该库将string
的符号定义为std::v1::basic_string
,而libstdc ++(GCC的默认值)使用std::__cxx11::basic_string
在编译时,您不知道这两种用法之间的区别,因为您使用的是同一接口。但是,实现是不同的。 在调用时,需要一个这样的字符串的函数,您将需要使用相同版本的STL进行编译。
我确定对于Clang,您可以传递-stdlib=libc++
来指示此版本的STL,但我尚未在GCC中尝试过。