【问题标题】:Tips for reducing size of .dylib and .so减小 .dylib 和 .so 大小的提示
【发布时间】:2018-06-11 05:06:06
【问题描述】:

我正在尝试手动编译 SDK,但生成的 .dylibs 和 .so 大小超过 70mb:

➜  lib ✗ pwd
/Users/gond/opencv/build/lib
➜  lib ✗ du -h .
 71M

这是我正在使用的命令:

cmake -D CMAKE_BUILD_WITH_INSTALL_RPATH=ON \ -D CMAKE_INSTALL_PREFIX=/usr/local ..

有什么办法可以缩小尺寸吗?最终我想为 Android 编译 opencv,但是对于一个合理的应用程序来说,70mb 的库太大了。

任何想法表示赞赏。

更新:

这是使用上述命令生成的最大 10 个库的列表:

38M libopencv_imgproc.3.4.0.dylib
13M libopencv_core.3.4.0.dylib
4.1M libopencv_dnn.3.4.0.dylib
3.1M cv2.so
2.9M libopencv_imgcodecs.3.4.0.dylib
1.9M libopencv_calib3d.3.4.0.dylib
1.3M libopencv_ts.a
1.2M libopencv_java340.dylib
916K libopencv_photo.3.4.0.dylib

以下是使用 Android 选项的最大 10 个列表:

40M libopencv_java3.so
6.0M libopencv_imgproc.a
5.5M libopencv_core.a
2.5M libopencv_ximgproc.a
2.4M libopencv_calib3d.a
1.6M libopencv_ts.a
1.5M libopencv_photo.a
1.5M libopencv_ml.a
1.3M libopencv_features2d.a

奇怪的是,libopencv_imgproc.3.4.0.dylib 是 38mb 而libopencv_imgproc.a 是 13mb。有没有办法省略“子模块”?例如,有没有一种方法可以省略运动分析、对象检测但保留 ColorMaps?

【问题讨论】:

  • 除非您构建了单一的 world 变体,否则每个 OpenCV 模块都有一个库。所以弄清楚你真正需要哪些(基于你正在使用的功能)——这可能是一个小得多的子集。
  • @DanMašek 使用上面的命令,最大的库是.dylib for improc,即 38mb。它可以以某种方式剥离吗?此外,如果我使用 Android 选项构建,则生成的 libopencv_java3.so 本身就是 40mb。还有其他 .a 库,但最大的库约为 6mb。

标签: opencv build cmake opencv4android


【解决方案1】:

试试

cmake -DCMAKE_BUILD_TYPE=MINSIZEREL ...

尝试strip 一切并使用upx 也...

【讨论】:

  • 我认为剥离不会做任何事情。绑定确保它们引用的所有内容都保持不变。我不想使用MINSIZEREL,因为速度没有优化。
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多