减少与opencv静态链接的可执行文件的大小

decreasing the size of executable which is statically linked with opencv

本文关键字:可执行文件 链接 静态 opencv      更新时间:2023-10-16

我已经编写了这段代码,使用opencv库从网络摄像头捕获照片。

#include <opencv2/highgui/highgui.hpp>
#include<windows.h>
#include<iostream>
using namespace std;
using namespace cv;
void camcapture()
{
   VideoCapture cap(0);
    char name[100];
int i=0;
while(1){
    Sleep(1000);
    sprintf(name,"%s%d.jpg","test",i++);
Mat save_img;
cap >> save_img;
if(save_img.empty())
{
  std::cerr << "Something is wrong with the webcam, could not get frame." << std::endl;
}
// Save the frame into a file
imwrite(name, save_img); // A JPG FILE IS BEING SAVED
printf("image %s savedn",name);
}
}
int main()
{
    camcapture();
}

然后我静态地链接了一些所需的opencv库,使其可移植。当我编译代码时,可执行文件的大小是4.73,有没有办法在不影响可移植性的情况下减小可执行文件的大小?我不想动态地链接库。这是编译日志。

Build started on: 25-10-2016 at 22:52.58
Build ended on: 25-10-2016 at 22:53.00
-------------- Build: Release in cvtest (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -O2 -ID:openopencvmybuild4installinclude -ID:openopencvmybuild4installincludeopencv -ID:openopencvmybuild4installincludeopencv2 -c D:c_cpp_codescvtestmain.cpp -o objReleasemain.o
mingw32-g++.exe -LD:openopencvmybuild4installx86mingwstaticlib -o binReleasecvtest.exe objReleasemain.o -s D:openopencvmybuild4liblibopencv_world310.a D:openopencvmybuild43rdpartylibliblibjpeg.a D:openopencvmybuild43rdpartylibliblibwebp.a D:openopencvmybuild43rdpartylibliblibtiff.a D:openopencvmybuild43rdpartylibliblibpng.a D:openopencvmybuild43rdpartylibliblibjasper.a D:openopencvmybuild43rdpartyliblibIlmImf.a D:openopencvmybuild43rdpartyliblibzlib.a C:MinGWlibVfw32.Lib C:MinGWlibUuid.Lib C:MinGWlibOle32.Lib C:MinGWlibOleAut32.Lib
Output file is binReleasecvtest.exe with size 4.73 MB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 0 warning(s) (0 minute(s), 1 second(s))

这取决于您想如何使用它。除了注释中的响应,您还可以使用可执行的打包程序,如UPX。