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

C++ Discussion :

cannot find -ltiff


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut cannot find -ltiff
    Bonjour,
    Dans le cadre d'un stage en entreprise de traitement d'images, on me demande à ce stade de mon travail de convertir des images binaires en TIFF, et ce par le biais d'un fichier de code déjà fourni mais qu'il faut compiler. Seulement, à la compilation, j'obtiens l'erreur suivante que je ne comprends absolument pas, et malgré quelques recherches sur internet, ça reste assez flou, si quelqu'un peut m'éclairer !

    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    modis@modis:~/Desktop/b2tf$ make
    gcc -O2  -Wall  b2tf_strip.o GeographicTypes.o jpeg_strip.o pal_strip.o -lm -ltiff -lgeotiff -L/usr/lib -I/home/userglov/include  -o b2tf_strip
    /usr/bin/ld: cannot find -ltiff
    collect2: ld returned 1 exit status
    Merci d'avance !

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Bonjour,
    -lbidule est l'option du compilateur gcc ou g++ pour lui dire "utilise la bibliothèque libbidule".
    Il faut qu'elle soit installée dans une zone connue de ld (le linker)

    Comme je vois que tu as utilisé make, il faut vérifier ton makefile.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse !

    Je viens de jeter un coup d'oeil au Makefile et je vois ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBS=   -lm -ltiff -lgeotiff -L/usr/lib -I/home/userglov/include
    évidemment, je dois les modifier car cela ne correspond pas à la disposition de mes dossiers et localisations des librairies, mais peux-tu m'éclairer sur la différence entre le -L et le -I à quoi il servent?

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    Vérifier le Makefile oui, mais d'abord vérifier que la lib en question est installée sur ta machine de travail. Tu as posté plus vite, je suppose du coup que tu as bien la lib quelque part.

    -L sert à indiquer ou chercher les binaires compilés des bibliothèques
    -I sert à indiquer ou trouver les headers (pour pouvoir les utiliser avec #include)
    Find me on github

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    éventuellement, il faudrait rajouter -L/usr/local/lib, si libtiff a été installée manuellement.

    -I indique au compilateur un dossier dans lequel chercher les chemins demandés via #include "".

    Je pense que c'est un bon moment pour t'intéresser à la chaine de compilation GCC (GNU Compiler Collection).
    Ainsi qu'au processus de compilation d'un programme C++
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses,

    J'ai modifié la ligne dans le Makefile pour la faire correspondre aux dossiers de librairie et d'includes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LIBS=   -lm -ltiff -lgeotiff -L/modis/OSS-MODIS/chaine_oss/warpgrid/lib -I/modis/OSS-MODIS/chaine_oss/warpgrid/include
    sachant que dans /lib j'ai un fichier libtiff.so
    Mais en vain, j'ai toujours la même erreur qui s'affiche ...

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Sachant que -L et -I acceptent des chemins relatifs.

    Je pense d'ailleurs que ls /modis/OSS-MODIS/chaine_oss/warpgrid/lib échouera.
    En effet, ton chemin est relatif.

    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LIBS=   -lm -ltiff -lgeotiff -Lmodis/OSS-MODIS/chaine_oss/warpgrid/lib -Imodis/OSS-MODIS/chaine_oss/warpgrid/include
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Toujours le même problème à l'écran ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    modis@modis:~/Desktop/b2tf$ make
    gcc -O2  -Wall  b2tf_strip.o GeographicTypes.o jpeg_strip.o pal_strip.o -lm -ltiff -lgeotiff -Lmodis/OSS-MODIS/chaine_oss/warpgrid/lib -Imodis/OSS-MODIS/chaine_oss/warpgrid/include -o b2tf_strip
    /usr/bin/ld: cannot find -ltiff
    collect2: ld returned 1 exit status
    make: *** [b2tf_strip] Erreur 1

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    le répertoire modis ne correspond-il pas à /home/modis ? (petite hypothèse au vu du prompt modis@modis).
    Dans ce cas, tu devrais peut-être essayer le chemin ~/OSS-MODIS/chaine_oss/warpgrid/libSinon, positionne toi dans ton répertoire lib et utilises pwd pour avoir le chemin absolu

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par therwald Voir le message
    le répertoire modis ne correspond-il pas à /home/modis ? (petite hypothèse au vu du prompt modis@modis).
    Dans ce cas, tu devrais peut-être essayer le chemin ~/OSS-MODIS/chaine_oss/warpgrid/libSinon, positionne toi dans ton répertoire lib et utilises pwd pour avoir le chemin absolu
    Ca marche en mettant /home/modis/ !!
    Merci beaucoup !

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    De nada.
    Maintenant l'inconvénient de cette solution est qu'elle est un tantinet fragile (en gros le makefile ne marche que pour toi, le prochain devra rectifier aussi...)
    Je ne sais pas de quel temps et de quelle latitude tu disposes pour essayer de faire plus robuste dans ton stage, mais disons que dans le cas général, si tu devais mettre en place un projet je conseillerais soit d'utiliser des localisations plus standard (/usr/lib et /usr/local/lib) soit pour des versions de bibliothèques plus "exotiques" des lib situées dans la même arborescence que le source, avec, comme le soulignait leternel, des chemins relatifs (à l'emplacement du makefile) dans ton makefile.

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    normalement, le makefile est à la racine du projet, et ne contient que des chemins relatifs au projet lui même.

    une architecture assez courante de projet avec lib manuelle serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    projet
    |-> libalpha
    |   |-> includes/
    |   |-> src/
    |   |-> makefile
    |-> libbeta
    |   |-> includes/
    |   |-> src/
    |   |-> makefile
    |-> includes/
    |-> src/
    |-> makefile
    Une variante regroupe tous les includes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    projet
    |-> libalpha
    |-> libbeta
    |-> includes/
    |   |-> alpha
    |   |-> beta
    |-> src/
    |-> libs/
    |-> makefile

    Dans la deuxième variantes, supposant qu'on compile les bibliothèques dans libs:
    Code makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    libs/libalpha.so:
        g++ libalpha/*.cpp -Iincludes/alpha -o libs/libalpha.so
     
    libs/libbetaa.so:
        g++ libbeta/*.cpp -Iincludes/beta -o libs/libbeta.so
     
    application: libalpha.so libbetaa.so
        g++ src/*.cpp -Iincludes -Llibs -o projets
    (j'ai omis les autres flags de compilations, c'est juste une maquette)

    Par ailleurs, si maintenir le makefile est trop galère, tu peux te tourner vers des remplaçant, tels que scons ou waf
    Personnellement, j'utilise souvent scons, car il n'y a à peu près rien à écrire pour du C++
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. [STRUTS] [Debutant] Cannot find message resources...
    Par grizzz dans le forum Struts 1
    Réponses: 14
    Dernier message: 05/05/2011, 17h08
  2. /usr/bin/ld: cannot find -lX11
    Par Michaël dans le forum Administration système
    Réponses: 6
    Dernier message: 10/03/2008, 17h13
  3. [JSF] mon premier JSF:Cannot find FacesContext
    Par anitshka dans le forum JSF
    Réponses: 15
    Dernier message: 24/08/2007, 19h19
  4. Message d'erreur: Cannot find file ID 2
    Par glanumf dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/05/2007, 17h08
  5. [Tomcat 4.1][Struts] Cannot find global ActionForward....
    Par otminou dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/09/2004, 13h04

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