Open thanatos915 opened 4 years ago
who can help me。 thanks。
I have a solution:
Download and run the MinGW-W64 compiler installer from https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/ The latest version of the MinGW-W64 toolchain is 7.3.0, but any version from 7.X on should work. Choose the options for “posix” threads, and for “seh” exceptions handling, then install to the default location c:\Program Files\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev2. Add the C:\Program Files\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev2\mingw64\bin path to your System Path.
Download and install CMake https://cmake.org/download/ to the default location. CMake installer will add CMake to your system path. Add C:\opencv\build\install\x64\mingw\bin to your System Path.
delete all videoio files in %GOPATH%\src\gocv.io\x\gocv for videoio to work you need to add ffmped statically, I did not found a good solution for this yet.
change win_build_opencv.cmd cmake line to:
cmake -G "MinGW Makefiles" -BC:\opencv\build -DOPENCV_EXTRA_MODULES_PATH=C:\opencv\opencv_contrib-4.5.1\modules -D WITH_IPP=OFF -D WITH_OPENCL=OFF -DBUILD_opencv_hdf=OFF -D BUILD_TIFF=ON -D WITH_TIFF=ON -D BUILD_PNG=ON -D WITH_PNG=ON -D BUILD_ZLIB=ON -D WITH_JASPER=OFF -D WITH_OPENEXR=OFF -D BUILD_OPENEXR=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_apps=OFF -D BUILD_examples=OFF -D BUILD_opencv_datasets=OFF -D BUILD_opencv_line_descriptor=OFF -DWITH_GTK=OFF -DENABLE_PRECOMPILED_HEADERS=OFF -DOPENCV_GENERATE_PKGCONFIG=ON -DWITH_WIN32UI=ON -DWITH_MSMF=OFF -DBUILD_opencv_python3=OFF -DBUILD_opencv_python2=OFF -DENABLE_CXX11=ON -DBUILD_opencv_java=OFF -DBUILD_opencv_python=OFF -DWITH_OPENCL_D3D11_NV=OFF -DOPENCV_ALLOCATOR_STATS_COUNTER_TYPE=int64_t -Wno-dev C:\opencv\opencv-4.5.1
then
chdir %GOPATH%\src\gocv.io\x\gocv
win_build_opencv.cmd
set PKG_CONFIG_PATH=C:\opencv\build\unix-install
pkg-config --cflags --libs --static opencv4
change the cgo.go files to sth similiar like this (depends on pkg-config output) (be sure to add -static -static-libgcc -static-libstdc++ and -lcomdlg32 -lwinpthread and REMOVE videoio library!)
/*
#cgo !windows pkg-config: opencv4
#cgo CXXFLAGS: --std=c++11
#cgo windows CPPFLAGS: -IC:/opencv/build/install/include
#cgo windows LDFLAGS: -LC:/opencv/build/install/x64/mingw/staticlib -LC:/opencv/build/lib -static -static-libgcc -static-libstdc++ -lopencv_gapi451 -lopencv_stitching451 -lopencv_aruco451 -lopencv_bgsegm451 -lopencv_bioinspired451 -lopencv_ccalib451 -lopencv_dnn_objdetect451 -lopencv_dnn_superres451 -lopencv_dpm451 -lopencv_face451 -lopencv_fuzzy451 -lopencv_hfs451 -lopencv_img_hash451 -lopencv_intensity_transform451 -lopencv_mcc451 -lopencv_quality451 -lopencv_rapid451 -lopencv_reg451 -lopencv_rgbd451 -lopencv_saliency451 -lopencv_stereo451 -lopencv_structured_light451 -lopencv_phase_unwrapping451 -lopencv_superres451 -lopencv_optflow451 -lopencv_surface_matching451 -lopencv_text451 -lopencv_tracking451 -lopencv_highgui451 -lopencv_plot451 -lopencv_videostab451 -lopencv_xfeatures2d451 -lopencv_shape451 -lopencv_ml451 -lopencv_ximgproc451 -lopencv_video451 -lopencv_dnn451 -lopencv_xobjdetect451 -lopencv_objdetect451 -lopencv_calib3d451 -lopencv_imgcodecs451 -lopencv_features2d451 -lopencv_flann451 -lopencv_xphoto451 -lopencv_photo451 -lopencv_imgproc451 -lopencv_core451 -llibprotobuf -lzlib -llibjpeg-turbo -llibwebp -llibpng -llibtiff -llibopenjp2 -lquirc -lade -lwsock32 -lcomctl32 -lcomdlg32 -lgdi32 -lole32 -lsetupapi -lws2_32 -lwinpthread
*/
@marcown that is very great research.
Can you try the same thing, but instead of deleting the videoio files from GoCV, instead when you build OpenCV try adding the flag -DWITH_FFMPEG=OFF
. That might allow VFW or some of the other Windows-specific support already in OpenCV to work.
I think the problem is in part that due to a licensing conflict you cannot link static of FFMPEG on Windows.
Description
win 10 上打包静态库,运行报错。我不确定是我编译的错误,还是代码错误
Steps to Reproduce
my directory like this
or edit gocv/cgo.go
package gocv
// Changes here should be mirrored in contrib/cgo.go and cuda/cgo.go.
/*
cgo !windows pkg-config: opencv4
cgo CXXFLAGS: --std=c++11
cgo windows CPPFLAGS: -IC:/opencv/build/install/include
cgo windows LDFLAGS: -LC:/opencv/build/install/x64/mingw/staticlib -lopencv_core420 -lopencv_face420 -lopencv_videoio420 -lopencv_imgproc420 -lopencv_highgui420 -lopencv_imgcodecs420 -lopencv_objdetect420 -lopencv_features2d420 -lopencv_video420 -lopencv_dnn420 -lopencv_xfeatures2d420 -lopencv_plot420 -lopencv_tracking420 -lopencv_img_hash420 -lopencv_calib3d420
*/ import "C"
go build -a -ldflags '-extldflags "-static"' -o app.exe