C++ 使用macports安装opencv并在qt(osx)中使用

C++ 使用macports安装opencv并在qt(osx)中使用,c++,macos,qt,opencv,macports,C++,Macos,Qt,Opencv,Macports,我想在mac上的qt中使用openCV库。我读了很多关于如何在qt(我有5.1版)中配置pro文件以使用OpenCV的内容,但是没有任何东西适合我。 我所做的: 1) sudo port install opencv 2) sudo port install pkg-config 3) add to *.pro file: LIBS += `pkg-config --libs opencv` 但我只得到一个错误: Target: x86_64-apple-darwin13.0.0 Th

我想在mac上的qt中使用openCV库。我读了很多关于如何在qt(我有5.1版)中配置pro文件以使用OpenCV的内容,但是没有任何东西适合我。 我所做的:

1) sudo port install opencv
2) sudo port install pkg-config
3) add to *.pro file: LIBS += `pkg-config --libs opencv`
但我只得到一个错误:

    Target: x86_64-apple-darwin13.0.0
Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -headerpad_max_install_names -macosx_version_min 10.9.0 -o opencv_pokus3.app/Contents/MacOS/opencv_pokus3 -L/opt/local/lib -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk main.o mainwindow.o moc_mainwindow.o -lopencv_core -lopencv_highgui -framework QtWidgets -framework QtGui -framework QtCore -framework OpenGL -framework AGL -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.osx.a -F/Applications/Qt5.1.1/5.1.1/clang_64/lib
Undefined symbols for architecture x86_64:
  "cv::imread(std::string const&, int)", referenced from:
      _main in main.o
  "std::allocator<char>::allocator()", referenced from:
      _main in main.o
  "std::allocator<char>::~allocator()", referenced from:
      _main in main.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
      _main in main.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [opencv_pokus3.app/Contents/MacOS/opencv_pokus3] Error 1
12:56:15: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project opencv_pokus3 (kit: Desktop Qt 5.1.1 clang 64bit)
When executing step 'Make'
12:56:15: Elapsed time: 00:00.
但是,不幸的是,它得到了同样的结果

PS:我可以通过终端编译openCV helloWorld程序:

g++ `pkg-config --libs --cflags opencv` -o helloWorld  helloOpenCV.cpp
or
clang++ `pkg-config --libs --cflags opencv` -o helloWorld  hello.cpp
一切都很好

我的配置: OSX 10.9, QT 5.1.1, opencv 2.4.7通过macports安装, pkg config 0.28通过macports安装

简单的hello world计划:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
...
char var;
cv::Mat img;
img = cv::imread("./imgres.jpg");
cv::namedWindow("Image");
cv::imshow("Image", img);
std::cin >> var;
...

这应该是个问题吗?为什么-L为空?

您没有发布完整的错误消息,并且不清楚您使用的编译器。如果您使用的是GCC版本,我想问题可能不是实际查找OpenCV库(因为您这样做似乎是正确的),而是这些库中缺少符号

这可能是因为苹果在10.9将默认的C++运行库更改为LBC+++。这种改变也引入了一种不同的C++符号篡改方案,即用LangB++的CLAN构建的OpenCV库中的符号不同于G+将产生的OpenCV标头——我相信这就是为什么你看到缺少的符号。

即使符号的符号是相同的,用G+ +从Mac端口编译OpenCV不是一个好主意,因为G++只支持ListSTDC++作为运行时,这意味着你自己的软件将尝试使用LIbSTDC++ +,OpenCV会尝试使用LIbc++作为C++运行时。这将在同一进程中混合两个不同(且不兼容)的运行时,并导致未定义的行为(最好是随机崩溃)


P> >概括地说,编译C++代码在10.9和以上时意味着你还必须手动编译所有需要的G+库。另一种选择是,尝试使用clang++作为编译器。

错误在于椅子和键盘之间

我是按照这个建议来做的


但是我只点击了qmake和build,而不是“clean all”,所以main.o一直都是为osx 10.6编译的…

并且用clang++编译程序也可以,没有错误这实际上是我描述的同一个问题。请注意,如果您使用的是二进制的QT分布,它是针对LIbSTDC++ +和Opencv构建的,它是在同一个二进制文件中使用的,它混合了两个C++运行时,这会导致未定义的行为和崩溃。您需要重新编译Qt或OpenCV,而不是其他C++运行库。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
...
char var;
cv::Mat img;
img = cv::imread("./imgres.jpg");
cv::namedWindow("Image");
cv::imshow("Image", img);
std::cin >> var;
...
pkg-config --libs opencv
/opt/local/lib/libopencv_calib3d.dylib /opt/local/lib/libopencv_contrib.dylib /opt/local/lib/libopencv_core.dylib /opt/local/lib/libopencv_features2d.dylib /opt/local/lib/libopencv_flann.dylib /opt/local/lib/libopencv_gpu.dylib /opt/local/lib/libopencv_highgui.dylib /opt/local/lib/libopencv_imgproc.dylib /opt/local/lib/libopencv_legacy.dylib /opt/local/lib/libopencv_ml.dylib /opt/local/lib/libopencv_nonfree.dylib /opt/local/lib/libopencv_objdetect.dylib /opt/local/lib/libopencv_photo.dylib /opt/local/lib/libopencv_stitching.dylib /opt/local/lib/libopencv_superres.dylib /opt/local/lib/libopencv_ts.a /opt/local/lib/libopencv_video.dylib /opt/local/lib/libopencv_videostab.dylib

pkg-config --libs-only-L opencv