cmake could not find openssl_Mac OSX系统CMake、QT5运行OpenCV 4.0
最近打算練習下QT玩一玩,畢竟QT是跨平臺的API,就可以免去了直接學各平臺系統的API然后能做一些簡單的應用,所以比較值得學習。對我來說,我比較關注計算機圖形學和計算機視覺,所以最重要的包就是OpenGL和OpenCV。其中OpenGL在安裝QT的時候,離線安裝包中已經包含OpenGL和OpenGL ES,并且有對應的example來測試OpenGL,所以這部分沒出太大問題。但是OpenCV遇到了問題,因此記錄一下解決過程。
平臺:MacBook Pro with OS X 10.14.3
CMake:CMake 3.10.2
QT:QT 5.12、QT creator 4.8.1
OpenCV:OpenCV 4.0.1
1、安裝OpenCV
Mac安裝OpenCV很容易,一行命令就解決了。
brew install opencv### 此處我不得不說OSX對程序員來說實在是太好用太方便了,不信你在Ubuntu中試試下面這行命令?
apt-get install opencv怎么樣?不行吧?(^o^)/~ ###
好的言歸正傳,此時homebrew自動安裝的OpenCV版本是最新的(當前是4.0.1),如果你想安裝OpenCV 3的版本可以使用:
brew install opencv@3安裝好之后把下面的東西加入你的~/.bash_profile(如果用的是oh my zsh的話是加入到~/.zshrc)最后,這是為了讓你的系統找到一些需要用到的環境:
export PATH="/usr/local/opt/openssl/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"export PATH="/usr/local/opt/icu4c/bin:$PATH" export PATH="/usr/local/opt/icu4c/sbin:$PATH" export LDFLAGS="-L/usr/local/opt/icu4c/lib" export CPPFLAGS="-I/usr/local/opt/icu4c/include" export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"export LDFLAGS="-L/usr/local/opt/openblas/lib" export CPPFLAGS="-I/usr/local/opt/openblas/include" export PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig"export LDFLAGS="-L/usr/local/opt/readline/lib" export CPPFLAGS="-I/usr/local/opt/readline/include" export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"然后就裝好了。
2、CMake測試OpenCV
隨便建一個文件夾,寫一個CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)add_compile_options(-std=c++11)project(opencv_test)find_package(OpenCV REQUIRED)add_executable(opencv_test opencv_test.cpp) #注意.cpp名字要和你的.cpp名字一致target_link_libraries(opencv_test ${OpenCV_LIBS})寫一個opencv_test.cpp:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream>using namespace std;int main( int argc, char** argv) {cv::Mat img = cv::imread("某張圖的路徑");cv::imshow("test", img);cv::waitKey(0);return 0; }然后命令行輸入:
cmake . make ./opencv_test出現一個窗口名為“test”,窗口里有這張圖,則大功告成。
3、QT配置
新建一個空的QT Console Application,隨便取個名字叫test_opencv。
建立之后,在他的test_opencv.pro配置文件中,輸入OpenCV的頭文件所在的位置(一般來說是/usr/local/include/opencv2),以及動態鏈接庫在的位置(一般來說是/usr/local/lib),記得LIBS那里-L不能少:
INCLUDEPATH += /usr/local/include INCLUDEPATH += /usr/local/include/opencv2 LIBS += -L/usr/local/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_fuzzy -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core好的,然后就是在main.cpp里鍵入你的代碼測試:
#include <QCoreApplication> #include <opencv2/core.hpp> #include <opencv2/highgui/highgui.hpp>int main(int argc, char *argv[]) {cv::Mat img = cv::imread("某張圖的路徑");cv::imshow("test", img);cv::waitKey(0);return 0; }然后點擊左下角的運行按鈕,編譯完,會自動打開terminal執行這段命令,然后就跳出了帶著圖片的“test”窗口。
會出現的問題:
1、有人說QT會出現下面的情況,但是這個情況我沒有遇到過:
dyld: Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /usr/local/lib/libjpeg.8.dylib in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO解決方法是:項目-> Build & Run -> Run -> Run Environment -> 詳情,然后點擊DYLD_LIBRARY_PATH,再點擊取消設置。(但是我總感覺這個辦法不是很靠譜,因為這是把動態鏈接的位置給取消了,可能會帶來其他問題)這個問題我沒遇到過哦!!只是提供參考。
2、我在QT中遇到的情況:
symbol(s) not found for architecture x86_64 linker command failed with exit code 1 (use -v to see invocation)這情況初學者基本都遇到過,不管在什么系統上win也好、Ubuntu也好、OSX也好,意思大家都知道了就是動態鏈接庫沒找到。這問題奇怪了,我明明是設置了LIBS的,怎么沒找到,按照網上找的各種方法也都試過了,卵用。
然后我特意進入/usr/local/lib里看,確實有很多libopencv_*的文件,后綴是版本好。因為我曾經安裝過OpenCV3代的版本,所以我發現lib里非常亂,什么2.4、3.4.0、3.4.1、3.4.5各種都有。所以我懷疑可能是版本發生了沖突,然后我決定重新清理一下OpenCV。(注意!!!下面命令是有風險的,慎用!!!明確需要再用!!!出問題我不負責!!!)
brew uninstall opencv rm /usr/local/lib/libopencv_* rm -rf /usr/local/include/opencv rm -rf /usr/local/include/opencv2所以我就把系統里所有的OpenCV庫啊、頭文件啊啥的全部清理了,然后重新安裝OpenCV。
brew install opencv然后我發現新裝的OpenCV4的頭文件在/usr/local/include/opencv4/opencv2這個文件夾里,為了統一一般來說opencv2這個文件夾應該直接在/usr/local/include/opencv2這里的,所以我就把opencv2這個文件夾復制到了/usr/local/include里了。再回到QT里,運行,搞定!
好了,填坑就到這里,希望能夠幫助大家。繼續學習。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的cmake could not find openssl_Mac OSX系统CMake、QT5运行OpenCV 4.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎样使用_Python如何合
- 下一篇: java信息管理系统总结_java实现科