我已經構建了一個基於this post的靜態opencv庫,之後我想爲我的應用程序調用靜態opencv庫。然而,似乎該應用程序無法鏈接的靜態OpenCV庫,它給我下面的警告:調用靜態opencv庫
ld: warning: ignoring file /usr/local/lib/libopencv_core.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/libopencv_core.a
ld: warning: ignoring file /usr/local/lib/libopencv_highgui.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/libopencv_highgui.a
ld: warning: ignoring file /usr/local/lib/libopencv_imgproc.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/libopencv_imgproc.a
ld: warning: ignoring file /usr/local/lib/liblibjasper.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/liblibjasper.a
ld: warning: ignoring file /usr/local/lib/liblibjpeg.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/liblibjpeg.a
ld: warning: ignoring file /usr/local/lib/liblibpng.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/liblibpng.a
ld: warning: ignoring file /usr/local/lib/liblibtiff.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/liblibtiff.a
ld: warning: ignoring file /usr/local/lib/libzlib.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/libzlib.a
ld: warning: ignoring file /usr/local/lib/libIlmImf.a, file was built for archive which is not the architecture being linked (i386): /usr/local/lib/libIlmImf.a
在我看來,該應用程序試圖調用動態OpenCV庫,以及一個簡單的只是調用cv::Mat
測試會給我下面的錯誤應用程序:
Undefined symbols for architecture i386:
"cv::Mat::deallocate()", referenced from:
cv::Mat::release() in main.o
"cv::fastFree(void*)", referenced from:
cv::Mat::~Mat() in main.o
編輯: 作爲答案表明,它是不是鏈接問題,而它是連接不同的建築建庫的問題。除此之外,你應該注意另外兩個重要的東西建立和使用靜態OpenCV庫時,有:
確保它建立僅有效架構(是)。
你也應該鏈接
framework Cocoa;general;-framework QTKit;general;-framework QuartzCore;general;-framework AppKit;
opencv_highgui.a使用。
謝謝,但對於應用程序和opencv庫,我使用「我的Mac 32」。通過這樣做,兩者將具有相同的架構。對? – feelfree
我不確定'我的Mac 32'是什麼......確保構建的拱門的唯一方法是在編譯器調用中明確地設置它,或者通過使用cmake選項或添加類似CXXFLAGS =「-arch i386」。順便說一下,除非你正在構建一個非常老的mac,現在應該是64位。 – sansuiso