我想在Mac OS X 10.9上使用qt創建器來構建簡單的OpenCV應用程序。所以我已經使用brew安裝了OpenCv和Qt4:OpenCv + mac os x + qt creator =奇怪的鏈接錯誤?
brew install opencv
brew install qt4
然後下載qt創建者。比我做了簡單的項目 - main.cpp中:
#include <QCoreApplication>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mat m;
m = Mat(2, 3, 4);
cv::threshold(m, m, 123, 200, 1);
m = cv::imread("asdasd", 1); //problem is here!
return a.exec();
}
和.pro文件:
QT += core
QT -= gui
TARGET = opencv_test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L/usr/local/lib \
-lopencv_core \
-lopencv_imgproc \
-lopencv_highgui \
-lopencv_objdetect \
-lopencv_calib3d
INCLUDEPATH += /usr/local/include/opencv
DEPENDPATH += /usr/local/include/opencv/include
INCLUDEPATH += $$PWD/../../../usr/local/include
DEPENDPATH += $$PWD/../../../usr/local/include
DEPENDPATH += $$PWD/../../../usr/local/lib
現在怪異的一部分 - 如果我評論這行:m = cv::imread("asdasd", 1); //problem is here!
和建設項目,一切都很好 - 它會編譯和鏈接沒有任何問題。所以看起來.dylib
文件沒問題,因爲我可以使用OpenCV函數 - Mat
對象構造函數和threshold
函數。但!如果我不imread註釋行我得到這個錯誤::-1: błąd:symbol(s) not found for architecture x86_64
或者更精確地說:
Undefined symbols for architecture x86_64: "cv::imread(std::string const&, int)", 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)
一般問題只是更大問題的一部分 - 我試圖建立用qt更大的項目創建者,但鏈接程序找不到一些(但不是全部!)函數。在項目中,它使用大量的OpenCV函數連接已經得到了問題只有:
cv::VideoCapture::VideoCapture(std::string const&)
cv::destroyWindow(std::string const&)
cv::CascadeClassifier::detectMultiScale(cv::Mat const&, std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size_<int>, cv::Size_<int>)
cv::CascadeClassifier::CascadeClassifier(std::string const&)
cv::imshow(std::string const&, cv::_InputArray const&)
在這個項目中,我使用更多的功能(主要是基本的圖像處理 - 門檻,圖像複製,繪製基本圖元,找到輪廓)和鏈接器可以處理它們沒有任何問題。
我已經嘗試過 - 從源代碼構建OpenCv和Qt4(僅使用構建brew install qt4 --from-source
)。我已經使用本教程構建了OpenCv - http://sadeepj.blogspot.com/2012/03/installing-and-configuring-opencv-to.html我也嘗試了很多CMAKE選項 - -DCMAKE_OSX_ARCHITECTURES=
x86_64或i386和-DCMAKE_CXX_FLAGS="-stdlib=libc++"
。我也嘗試過使用gcc(defautt編譯器是clang)版本4.2來構建它,但它失敗了(構建失敗)。 我已經嘗試過OpenCV 2.4.8和2.4.2。 我也試過設置:
CMAKE_CXX_FLAGS += -std=c++11
CMAKE_CXX_FLAGS += -stdlib=stdlibc++
仍然沒有運氣。
我檢查建造名爲.dylib文件是否x86_64的:
/usr/local/lib[master]$ lipo -info libopencv_core.dylib Non-fat file: libopencv_core.dylib is architecture: x86_64
和highgui文件是否包含任何有關imread
功能(我知道,這是不是它導出此函數的證明):
/usr/local/lib[master]$ nm libopencv_highgui.dylib | grep imread
00000000000069b0 T __ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi
0000000000006ac0 t __ZN2cvL7imread_ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEiiPNS_3MatE
可能很重要的信息:Mac OS X 10.9,64位。
/usr/local/lib[master]$ clang --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
/usr/local/lib[master]$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
順便說一句 - 是不是很奇怪,其實運行gcc --version
運行鐺?
所以問題是 - 我能做些什麼來編譯和構建它?我應該嘗試使用gcc還是別的什麼可以解決這個問題?此外 - 如果有人可以上傳他的圖書館並分享鏈接,所以我可以嘗試與他們會很好。任何能夠解決這個問題的解決方案對我來說都會很好 - 我可以從源碼,使用任何編譯器,鏈接器等構建一切。 - 只是幫助我使它工作,我會很高興:)
mac os x 10.9現在使用clang作爲默認編譯器 – Lefsler