Salut les OpenCV,

j'ai essayer de compiler OpenCV d'après les sources afin d'avoir les libraries static et de compiler mon programme avec.

Car je ne veut pas polluer le dossier LIBPATH ni INCLUDEPATH ("je sais que ça n'existe pas comme variable d'environnement") sous Linux avec mon les libraries et headers issue des source de OpenCV sous Linux pour la distribution de mon programme.

J'ai donc essayer de compiler mon programme avec les libraries static,
mais cela ne marche pas de donner les libraries static sur la ligne de commande comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#Makefile
 
CXX = g++
CXXFLAGS = -std=c++11 
 
# Better sort the file order in relationship to `pkg-config --libs opencv` linking chain order.
OPENCV_A = libopencv_calib3d.a \  
    libopencv_contrib.a                    \
    libopencv_core.a                        \
    libopencv_features2d.a              \
    libopencv_flann.a                       \
    libopencv_gpu.a                         \
    libopencv_highgui.a                   \
    libopencv_imgproc.a                  \
    libopencv_legacy.a                    \
    libopencv_ml.a                          \
    libopencv_objdetect.a               \
    libopencv_ocl.a                         \
    libopencv_photo.a                    \
    libopencv_stitching.a                \
    libopencv_superres.a               \
    libopencv_ts.a                          \
    libopencv_video.a                    \
    libopencv_videostab.a             
 
default:
[TAB] $(CXX) $(CXXFLAGS) main.cpp $(OPENCV_A)
obtenus grâce a:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$ cmake WITH_GTK=ON WITH_GTK3=ON CMAKE_BUILD_TYPE=RELEASE BUILD_SHARED_LIBS=OFF
$ make
J'ai un traceback de problème de `dlsym linking` (problème de ld) se rapportant aux dépendances (libjpeg, libpng).

J'ai néanmoins s réussis a compiler mon programme de manière a vraiment polluer un minimum: un fichier. Comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$ cmake WITH_GTK=ON WITH_GTK3=ON CMAKE_BUILD_TYPE=RELEASE BUILD_SHARED_LIBS=OFF
$ make opencv_python2    
$ cd ./lib
$ sudo cp cv2.so /usr/local/lib
$ sudo ldconfig
$ sudo ln -s  /usr/local/lib/cv2.so /usr/local/lib/libcv2.so # C'est la library du module python.
$ g++ -std=c++11 main.cpp -lcv2
Donc au résultat j'obtiens un exécutable linker dynamiquement et non compiler avec les libraries static mais qui fonctionne...

Je sais que OpenCV est complexe et demande beaucoup de dépendances du coup le processus de compilation manuel est long et compliquer.

Et je pense qu'il n'y pas d'erreur sur ma ligne de commande dans le Makefile en théorie.

Mais il y a un vice: c.a.d que j'utilise la library python 2 pour compiler l'exécutable écrit en C++ avec g++.

Je trouve pas ça très orthodoxe et vous demande donc conseil...

Merci pour vos réponses éclairées.