在 xcode 4.5.1 上链接库 OpenCV 2.4.2
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12770115/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Linking libraries OpenCV 2.4.2 on xcode 4.5.1
提问by glerg
I have installed opencv with macports following the directions here: Compile OpenCV (2.3.1+) for OS X Lion / Mountain Lion with Xcode
我已经按照此处的说明安装了带有 macports 的 opencv:Compile OpenCV (2.3.1+) for OS X Lion / Mountain Lion with Xcode
I have also search and tried every other variation of this on stackexchange and google, but this seems to get me closest.
我还在 stackexchange 和 google 上搜索并尝试了所有其他变体,但这似乎让我最接近。
It seems to work for some things, but not for sample code that ships with 2.4.2. Note that I have added ALL opencv 2.4.2 dylibs Link Binary with Libraries.
它似乎适用于某些事情,但不适用于 2.4.2 附带的示例代码。请注意,我已经添加了所有 opencv 2.4.2 dylibs Link Binary with Libraries。
For example, the following will compile and run:
例如,以下将编译并运行:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
int main ( int argc, char **argv )
{
cvNamedWindow( "My Window", 1 );
IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );
CvFont font;
double hScale = 1.0;
double vScale = 1.0;
int lineWidth = 1;
cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC,
hScale, vScale, 0, lineWidth );
cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font,
cvScalar( 255, 255, 0 ) );
cvShowImage( "My Window", img );
cvWaitKey();
return 0;
}
However, when I try to build any of the samples, such as the display_image.cpp, example, as follows, I get link errors.
但是,当我尝试构建任何示例时,例如 display_image.cpp 示例,如下所示,出现链接错误。
-DOES NOT WORK-
-不工作-
#include <stdio.h>
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/flann/miniflann.hpp"
using namespace cv; // all the new API is put into "cv" namespace. Export its content
using namespace std;
using namespace cv::flann;
static void help()
{
cout <<
"\nThis program shows how to use cv::Mat and IplImages converting back and forth.\n"
"It shows reading of images, converting to planes and merging back, color conversion\n"
"and also iterating through pixels.\n"
"Call:\n"
"./image [image-name Default: lena.jpg]\n" << endl;
}
int main(int argc, char *argv[])
{
help();
const char* imagename = argc > 1 ? argv[1] : "lena.jpg";
Mat img = imread(imagename); // the newer cvLoadImage alternative, MATLAB-style function
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if( !img.data ) // check if the image has been loaded properly
return -1;
Mat img_yuv;
cvtColor(img, img_yuv, CV_BGR2YCrCb); // convert image to YUV color space. The output image will be created automatically
vector<Mat> planes; // Vector is template vector class, similar to STL's vector. It can store matrices too.
split(img_yuv, planes); // split the image into separate color planes
imshow("image with grain", img);
waitKey();
return 0;
}
I get the following errors:
我收到以下错误:
Undefined symbols for architecture x86_64:
"cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)", referenced from:
_main in main1.o
"cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
_main in main1.o
"cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from:
_main in main1.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Any idea how to resolve this?
知道如何解决这个问题吗?
回答by Anthony Maida
I had the same problem. A build setting default seems to be different in Xcode 4.5.
我有同样的问题。Xcode 4.5 中的构建设置默认值似乎有所不同。
Under "Build Settings"--> Apple LLVM compiler 4.1 - Language >
在“构建设置”--> Apple LLVM 编译器 4.1 - 语言 >
C++ Standard Library:=Change from libc++(LLVM ...) to libstdc++(GNU C++ ...).
C++ 标准库:=从libc++(LLVM ...)更改为libstdc++(GNU C++ ...)。
回答by Marco
It's very likely that OpenCV has not been compiled with C++11 settings, while the program is. Set the build of your tool without C++11 switches (i.e. -std=c++11 -stdlib=libc++).
很可能 OpenCV 没有用 C++11 设置编译,而程序是。在没有 C++11 开关的情况下设置工具的构建(即 -std=c++11 -stdlib=libc++)。
回答by Manlio
Try to manually add the directory where port puts all the dylibs (/opt/local/lib
if I'm not getting wrong) in Build Settings->Library search path. This should fix the linking problem.
尝试/opt/local/lib
在 Build Settings->Library 搜索路径中手动添加 port 放置所有 dylib 的目录(如果我没有弄错的话)。这应该可以解决链接问题。