2012-10-07 36 views
12

Tôi đã cài đặt opencv với macports theo các hướng dẫn ở đây: Compile OpenCV (2.3.1+) for OS X Lion/Mountain Lion with Xcodethư viện liên kết OpenCV 2.4.2 trên xcode 4.5.1

Tôi cũng đã tìm kiếm và cố gắng mọi biến thể khác của việc này trên stackexchange và google, nhưng điều này dường như làm cho tôi gần nhất.

Dường như nó hoạt động đối với một số thứ, nhưng không làm việc với mã mẫu đi kèm với 2.4.2. Lưu ý rằng tôi đã thêm TẤT CẢ opencv 2.4.2 dylibs Link Binary with Libraries.

Ví dụ, sau đây sẽ biên dịch và chạy:

#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; 
} 

Tuy nhiên, khi tôi cố gắng xây dựng bất kỳ mẫu nào, chẳng hạn như display_image.cpp, ví dụ như sau, tôi nhận được lỗi liên kết.

-Không KHÔNG 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; 

} 

tôi nhận được các lỗi sau đây:

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) 

Bất kỳ ý tưởng làm thế nào để giải quyết này?

+0

Anthony và Marco cung cấp cho bạn câu trả lời đúng dưới đây. Một trong những điều đó, một khi bạn trải nghiệm nó, bạn biết điều đó mãi mãi. Bạn nên chấp nhận câu trả lời để giúp khách truy cập trong tương lai. – jww

Trả lời

0

Hãy thử thêm thủ công thư mục nơi cổng đặt tất cả các dylibs (/opt/local/lib nếu tôi không nhận được sai) trong đường dẫn tìm kiếm trong Cài đặt-> Thư viện. Điều này sẽ khắc phục vấn đề liên kết.

+0

Cảm ơn, nhưng tôi đã làm điều đó. Nếu không có nó, tôi nhận được một lỗi khác: ld: không tìm thấy thư viện nào cho lopencv_calib3d.2.4.2 clang: error: lệnh liên kết không thành công với mã thoát 1 (sử dụng -v để xem lời gọi) – glerg

41

Tôi gặp vấn đề tương tự. Một cài đặt mặc định xây dựng dường như khác nhau trong Xcode 4.5.

Dưới "Xây dựng Settings" -> Apple LLVM trình biên dịch 4.1 - Ngôn ngữ>

Thư viện chuẩn C++: = Thay đổi từ libC++ (LLVM ...) để libstdC++ (GNU C++. ..).

+0

Thật tuyệt, cảm ơn! Nó làm việc cho tôi. – tangqiaoboy

+0

Đây phải là câu trả lời được chấp nhận :) –

+0

Bạn có thể phát triển thêm về câu trả lời tôi không hiểu tại sao chúng ta phải thay đổi từ LLVM thành GNU C++. @glerg chấp nhận câu trả lời. – BRabbit27

3

Rất có khả năng OpenCV chưa được biên dịch với cài đặt C++ 11, trong khi chương trình là. Đặt công cụ xây dựng của bạn mà không cần các công tắc C++ 11 (tức là -std = C++ 11 -stdlib = libC++).

Các vấn đề liên quan