2017-12-31 108 views
1

Ich versuche, das SDK manuell, aber die erzeugten .dylibs und .so sind über 70MB groß zu kompilieren:Tipps für die Größe der .dylib reduziert und .so

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

Dies ist der Befehl I‘ mit m:

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

gibt es eine Möglichkeit, die Größe zu reduzieren? Letztendlich würde ich gerne opencv für Android kompilieren, aber 70MB wert von Bibliotheken wäre viel zu groß für eine vernünftige App.

Jeder Gedanke geschätzt.

UPDATE:

Hier ist eine Liste der größten 10 Bibliotheken erzeugt die obige Befehl:

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 

Hier ist die Liste der größten 10 der Android-Option:

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 

Seltsamerweise ist libopencv_imgproc.3.4.0.dylib 38mb noch libopencv_imgproc.a ist 13mb. Gibt es Möglichkeiten, "Submodule" auszulassen? Gibt es beispielsweise eine Möglichkeit, Bewegungsanalyse und Objekterkennung auszulassen, aber ColorMaps beizubehalten?

+0

Sofern Sie die monolithische gebaut sind 'World' Variante Sie eine Bibliothek pro OpenCV Modul. Also, herauszufinden, welche Sie tatsächlich benötigen (basierend auf welcher Funktionalität Sie verwenden) - das ist wahrscheinlich eine viel kleinere Teilmenge. –

+0

@ DanMašek Unter Verwendung des obigen Befehls ist die größte Bibliothek die '.dylib' für' improc', die 38mb ist. Kann es irgendwie abgestreift werden? Wenn ich mit Android-Optionen baue, ist das resultierende 'libopencv_java3.so' alleine 40mb. Es gibt andere '.a' Bibliotheken, aber die größte ist ungefähr 6 MB. –

Antwort

0

Versuchen cmake -DCMAKE_BUILD_TYPE=MINSIZEREL ... zu strip alles versuchen und upx auch verwenden ...

+0

Ich dachte, Strippen wird nichts tun. Die Bindungen sorgen dafür, dass alles, auf das sie verweisen, erhalten bleibt. Ich würde es vorziehen, nicht "MINSIZEREL" zu verwenden, da die Geschwindigkeit nicht optimiert ist. –

Verwandte Themen