cmake could not find openssl_Mac OSX系统CMake、QT5运行OpenCV 4.0
最近打算練習(xí)下QT玩一玩,畢竟QT是跨平臺的API,就可以免去了直接學(xué)各平臺系統(tǒng)的API然后能做一些簡單的應(yīng)用,所以比較值得學(xué)習(xí)。對我來說,我比較關(guān)注計算機(jī)圖形學(xué)和計算機(jī)視覺,所以最重要的包就是OpenGL和OpenCV。其中OpenGL在安裝QT的時候,離線安裝包中已經(jīng)包含OpenGL和OpenGL ES,并且有對應(yīng)的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版本是最新的(當(dāng)前是4.0.1),如果你想安裝OpenCV 3的版本可以使用:
brew install opencv@3安裝好之后把下面的東西加入你的~/.bash_profile(如果用的是oh my zsh的話是加入到~/.zshrc)最后,這是為了讓你的系統(tǒng)找到一些需要用到的環(huán)境:
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出現(xiàn)一個窗口名為“test”,窗口里有這張圖,則大功告成。
3、QT配置
新建一個空的QT Console Application,隨便取個名字叫test_opencv。
建立之后,在他的test_opencv.pro配置文件中,輸入OpenCV的頭文件所在的位置(一般來說是/usr/local/include/opencv2),以及動態(tài)鏈接庫在的位置(一般來說是/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; }然后點擊左下角的運(yùn)行按鈕,編譯完,會自動打開terminal執(zhí)行這段命令,然后就跳出了帶著圖片的“test”窗口。
會出現(xiàn)的問題:
1、有人說QT會出現(xiàn)下面的情況,但是這個情況我沒有遇到過:
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,再點擊取消設(shè)置。(但是我總感覺這個辦法不是很靠譜,因為這是把動態(tài)鏈接的位置給取消了,可能會帶來其他問題)這個問題我沒遇到過哦!!只是提供參考。
2、我在QT中遇到的情況:
symbol(s) not found for architecture x86_64 linker command failed with exit code 1 (use -v to see invocation)這情況初學(xué)者基本都遇到過,不管在什么系統(tǒng)上win也好、Ubuntu也好、OSX也好,意思大家都知道了就是動態(tài)鏈接庫沒找到。這問題奇怪了,我明明是設(shè)置了LIBS的,怎么沒找到,按照網(wǎng)上找的各種方法也都試過了,卵用。
然后我特意進(jìn)入/usr/local/lib里看,確實有很多l(xiāng)ibopencv_*的文件,后綴是版本好。因為我曾經(jīng)安裝過OpenCV3代的版本,所以我發(fā)現(xiàn)lib里非常亂,什么2.4、3.4.0、3.4.1、3.4.5各種都有。所以我懷疑可能是版本發(fā)生了沖突,然后我決定重新清理一下OpenCV。(注意!!!下面命令是有風(fēng)險的,慎用!!!明確需要再用!!!出問題我不負(fù)責(zé)!!!)
brew uninstall opencv rm /usr/local/lib/libopencv_* rm -rf /usr/local/include/opencv rm -rf /usr/local/include/opencv2所以我就把系統(tǒng)里所有的OpenCV庫啊、頭文件啊啥的全部清理了,然后重新安裝OpenCV。
brew install opencv然后我發(fā)現(xiàn)新裝的OpenCV4的頭文件在/usr/local/include/opencv4/opencv2這個文件夾里,為了統(tǒng)一一般來說opencv2這個文件夾應(yīng)該直接在/usr/local/include/opencv2這里的,所以我就把opencv2這個文件夾復(fù)制到了/usr/local/include里了。再回到QT里,運(yùn)行,搞定!
好了,填坑就到這里,希望能夠幫助大家。繼續(xù)學(xué)習(xí)。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的cmake could not find openssl_Mac OSX系统CMake、QT5运行OpenCV 4.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎样使用_Python如何合
- 下一篇: python excel整合_如何整合1