IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Fichiers .lib et .dll


Sujet :

OpenCV

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut Fichiers .lib et .dll
    Bonjour à tous

    j'ai installé opencv 2.2 comme indiqué sur la doc du site.

    je suis sur Visual Studio

    par contre je ne comprends pas pourquoi il me demande les fichiers .dll alors que je place les .lib pour pouvoir obtenir un unique .exe sans dll externes?

    je ne comprends rien ....

    merci bien à celui/celle qui pourrait m'expliquer

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    par contre je ne comprends pas pourquoi il me demande les fichiers .dll alors que je place les .lib pour pouvoir obtenir un unique .exe sans dll externes

    Les fichiers lib ne contiennent qu'une table des points d'entrée de la DLL. (pas de code exécutable).
    Juste avec les fichiers lib, il ne sera pas possible de se passer des DLL.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il faut comprendre que les dll sont des exécutables, ou, du moins, à considérer comme tels ( car elles n'ont "simplement" pas de fonction main qui offre un point d'entrée)

    Le fichier lib correspondant à une dll permet "juste" de définir symboles correspondant aux différentes fonctions accessibles dans la dll, mais il faut impérativement veiller à ce que la dll en question se trouve:
    • soit dans le dossier dans lequel se trouve ton application
    • soit dans un dans lequel le système va rechercher les différents exécutables (en gros, l'un des dossiers de la variable PATH)

    Généralement, sous windows, les dll se trouvent dans le dossier c:\windows\system32 ou c:\windows\sysWOW64 (en fonction de la version 32 ou 64 bits de la dll)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut

    Citation Envoyé par BlueMonkey Voir le message
    Juste avec les fichiers lib, il ne sera pas possible de se passer des DLL.
    Faut reconnaitre que Visual n'a pas facilité les choses. On peut créer deux types de bibliothèques, les bibliothèques statiques et les bibliothèques dynamiques. Les bibliothèques statiques ne génèrent qu'un fichier .lib que l'on rajoute à l'édition de lien de l'application. Ce fichier contient tout le code nécessaire et il n'y a nul besoin de .dll pour l'exécution de l'application ensuite. Les bibliothèques dynamiques sont constituées généralement d'un fichier .dll et d'un fichier .lib (quoi que ce dernier ne soit pas nécessaire, les symboles étant alors charger explicitement dans l'application). Ici, le .lib n'a pas vocation à contenir le code et l'exécution demande à ce que les DLL puissent être chargées ... et donc trouvées.

    Citation Envoyé par Garra Voir le message
    par contre je ne comprends pas pourquoi il me demande les fichiers .dll alors que je place les .lib pour pouvoir obtenir un unique .exe sans dll externes?
    Pour le debug, tu peux configurer l'option 'Executable Directories' et y ajouter les répertoires contenant les .dll (menu projet/propriétés, onglet VC++ directories) nécessaire. Configurer les répertoires du projet
    Lorsque tu distribues ton application, alors il est effectivement nécessaire de placer les fichiers .dll dans un répertoire que l'application puisse trouver. De mémoire, windows doit fouiller autour de : le répertoire où se trouve le .exe, les répertoires du PATH, les répertoires systèmes. (Il m'en manque peut être).

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut
    [...] On peut créer deux types de bibliothèques, les bibliothèques statiques et les bibliothèques dynamiques. Les bibliothèques statiques ne génèrent qu'un fichier .lib que l'on rajoute à l'édition de lien de l'application. Ce fichier contient tout le code nécessaire et il n'y a nul besoin de .dll pour l'exécution de l'application ensuite. Les bibliothèques dynamiques sont constituées généralement d'un fichier .dll et d'un fichier .lib
    N'ayant utilisé que peu Visual pour des DLL, je ne connaissais pas cette particularité. Merci pour l'info.
    Pour moi les librairies statiques / dynamiques dépendaient simplement du type de changement de la DLL.
    Mais on avait toujours besoin de la DLL.

    Ensuite dans de rare cas on pouvait bien avoir un .lib associé à un .obj permettant d'intégrer la "bibliothèque" dans l'exe.
    Mais ça restait anecdotique.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Par défaut
    merci à tous car ça m'aide à comprendre!!!!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    Bonjour à vous tous,

    Je me permet de poster mon probblème ici car mon problème semble fortement s'y rapprocher.
    J'ai essayé d'installer OpenCV comme il est indiqué sur la plupart des docs; Mon configuration est la suivante:

    ********************************************************
    VC++ Directories>Executables Files
    C:\OpenCV2.0\bin

    VC++ Directories>Include Files
    C:\OpenCV2.0\vs2008\lib\Debug
    C:\OpenCV2.0\vs2008\lib\Release


    C/C++>General
    C:\OpenCV2.0\include\opencv

    Linker>General
    >Additionnal Library Directories
    C:\OpenCV2.0\vs2008\lib\Release


    Linker>Input
    C:\OpenCV2.0\vs2008\lib\Debug
    C:\OpenCV2.0\vs2008\lib\Debug\cv200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\cvaux200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\cvhaartraining.lib
    C:\OpenCV2.0\vs2008\lib\Debug\cxcore200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\cxts200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\highgui200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\ml200d.lib
    C:\OpenCV2.0\vs2008\lib\Debug\opencv_ffmpeg200d.lib


    C:\OpenCV2.0\vs2008\lib\Release
    C:\OpenCV2.0\vs2008\lib\Release\cv200.lib
    C:\OpenCV2.0\vs2008\lib\Release\cvaux200.lib
    C:\OpenCV2.0\vs2008\lib\Release\cvhaartraining.lib
    C:\OpenCV2.0\vs2008\lib\Release\cxcore200.lib
    C:\OpenCV2.0\vs2008\lib\Release\cxts200.lib
    C:\OpenCV2.0\vs2008\lib\Release\highgui200.lib
    C:\OpenCV2.0\vs2008\lib\Release\ml200.lib
    C:\OpenCV2.0\vs2008\lib\Release\opencv_ffmpeg200.lib


    **********************************************************

    Pas de problème à la compilation du code suivant:

    *********************************************************
    #include "stdafx.h"
    #include <iostream>
    #include "cv.h"
    #include "cxcore.h"
    #include "highgui.h"

    using namespace std;

    int main()
    {
    IplImage *img=cvLoadImage("ISIB.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    if (!img) {
    printf("Erreur: On ne sait pas ouvrir le fichier.\n");
    return 2;//erreur pas de fichier trouvé
    }
    cvNamedWindow("Projet NIP WP RG", CV_WINDOW_AUTOSIZE);// créer une fenetre
    IplImage *img2=cvCloneImage(img); //cloner img
    cvShowImage("Projet NIP WP RG", img2); //afficher image fenetre
    cvWaitKey(0); //attendre touche
    cvDestroyWindow("Projet NIP WP RG"); //détruire la fenetre
    cvReleaseImage(&img); //memoire
    cvReleaseImage(&img2); //memoire
    return 0; //terminer avec succes
    }
    **********************************************************

    A l'éxécution, le message suivant s'affiche:

    "Cette application n'a pas pu démarrer car cxcore200d.dll est introuvable. La réinstallation de cette application peut corriger ce problème".

    Que dois-je faire et comment? Je désespère.

    Merci d'avance,

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Par défaut
    Bonjour,
    Le problème semble venir du fait que windows ne sache pas ou chercher la libraire en question.
    Il faut que tu ailles modifier le système path. Ici pour savoir comment faire et que tu ajoutes le chemin ou se trouve les .dll de opencv.

    Il est possible que tu ai besoin de redémarrer la machine.

    Sinon, tu devrais passer à OCV 2.4.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    Désolé de ne pas avoir mis à jour mon post et merci pour ta réponse.

    J'avais déjà ajouté les nouveaux chemins, mais visiblement pas les bons. Mais après relecture, j'ai mis les bons chemins et voilà que tout fonctionne.

    D'ailleurs, je suis encore débutant, mais je voudrais savoir si le C# est "à préférer" du C++ pour travailler avec OpenCV 2.4? Que pourrait m'apporter le C# si je désire utiliser OpenCV 2.4 pour détecter des défauts sur une image?

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/09/2013, 14h04
  2. creer un fichier lib à partir d'une DLL
    Par benoit70 dans le forum MFC
    Réponses: 12
    Dernier message: 28/09/2008, 22h58
  3. Génération DLL avec 2 fichiers .lib
    Par JeanPhi dans le forum MFC
    Réponses: 7
    Dernier message: 27/08/2007, 12h02
  4. [DLL] il ne me créé pas le fichier .lib
    Par Ruffi dans le forum MFC
    Réponses: 4
    Dernier message: 23/11/2005, 14h48
  5. [Pascal UCSD] Fichier .lib associé à une DLL
    Par nikhil dans le forum EDI
    Réponses: 3
    Dernier message: 25/07/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo