2013-04-18 38 views
12

Tôi gặp sự cố khi liên kết OpenCV trong Xcode. Tôi đã cài đặt OpenCV sử dụng brew:Ký hiệu không xác định đối với lỗi kiến ​​trúc x86_64 khi liên kết OpenCV trong Xcode

brew tap homebrew/science 
sudo brew install opencv 

tôi bắt đầu một dự án Xcode commandline mới, thêm /usr/local/lib/usr/local/include vào thư viện và tiêu đề con đường tìm kiếm. Tôi cũng đã thêm đầu ra của pkg-config --libs opencv đến other linker options.

Nhưng khi tôi cố gắng để biên dịch chương trình này mẫu nhỏ:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main(int argc, char *argv[]) 
{ 
    cv::Mat test; 
    cv::namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
    cv::waitKey(0);           // Wait for a keystroke in the window 
    return 0; 
} 

tôi nhận được lỗi mối liên kết sau đây:

Undefined symbols for architecture x86_64: 
    "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
     _main in main.o 
ld: symbol(s) not found for architecture x86_64 

Nhưng tôi có thể biên dịch chương trình trên dòng lệnh sử dụng

g++ `pkg-config --cflags --libs opencv` prog.cpp 

Vì vậy, tôi nghĩ rằng vấn đề là cách Xcode được thiết lập. Nhưng tôi không thể xác định chính xác những gì là khác nhau giữa cách biên dịch Xcode và đối số dòng lệnh của tôi.

Có ai biết lý do của lỗi này hoặc có ý tưởng tôi có thể cố gắng điều tra sự cố không?

Trả lời

27

Trong Xcode tạo một nhóm mới trong dự án của bạn, nhấp vào nó bên phải, chọn Add Files để Dự án, điều hướng đến thư mục /usr/local/lib và thêm các thư viện cơ bản sau đây:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

Trong các phiên bản trước của OpenCV, tên thư viện có thể là:

libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib

(Thư viện có thể ở một đường dẫn khác tùy thuộc vào phương pháp bạn đã sử dụng để cài đặt OpenCV trên máy Mac của bạn)

Edit:.

Những dòng trên là không cần thiết nếu bạn đã bao gồm các thư viện động trong giai đoạn liên kết như OP giải thích.

Chọn dự án của bạn, hãy vào Cài đặt Build tab, lọc theo C++ tiêu chuẩn thư viện, và thiết lập tham số này để libstdC++ (GNU C++ thư viện tiêu chuẩn).

+0

này tạo ra các lỗi tương tự. Thư viện của tôi được đặt tên hơi khác nhau. 'libopencv_core.dylib' Nhưng tôi không nghĩ đó là vấn đề. Ngoài ra, nó có nên tạo sự khác biệt chính xác như thế nào tôi thêm chúng? Sử dụng 'tùy chọn liên kết khác' Tôi đã cố gắng tạo lại phiên bản dòng lệnh của mình tốt nhất có thể. Có cách nào để kiểm tra xem xcode có thực sự sử dụng các thư viện đó để liên kết không? – sietschie

+0

@sietschie Xem câu trả lời đã chỉnh sửa của tôi, tôi đã thêm một cài đặt Xcode khác có thể gây ra sự cố này. –

+3

Sử dụng 'libstdC++' đã sửa lỗi của tôi. – sietschie

8

Tôi đã đặt thư viện chuẩn Cài đặt -> C++ thành Trình biên dịch Mặc định. Các lỗi biến mất.

+0

Cảm ơn, tôi vừa gặp sự cố này. Điều này giải quyết nó cho tôi! –

+0

libstdC++ không hoạt động đối với tôi nhưng trình biên dịch mặc định đã làm –

0

Đối với tôi, tôi sử dụng OpenCV trong xcode dành cho iOS, và tôi giải quyết các lỗi bằng cách sử dụng các opencv qua pod cài đặt chứ không phải khung opencv ngoại tuyến.

Bạn có thể có một thử bằng cách thêm văn bản opencv pod dưới đây:

pod 'OpenCV', '2.4.9' 
Các vấn đề liên quan