Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/07/2007, à 07:53

lbd

[Résolu] mauvais import des librairies VTK ? autre chose ?

salut. vous allez bien ? smile

alors, mon problème est simple, j'en ai trouvé plusieurs exemples sur le forum mais tous parlaient de makefile ou de choses bizarres dont je n'ai pas tout saisi, alors je me permets d'écrire ici.

j'ai rencontré ce problème à deux reprises : une fois en ayant installé les librairies VTK grâce à Synaptic sur mon PC domestique équipé d'Ubuntu(Feisty), une autre fois avec une installation manuelle de ces mêmes librairies sur un mac équipé de Tiger.
ce problème est :

mon fichier test.c

#include <vtkSphereSource.h>
#include "vtkActor.h"

int main ()
{
  return 1;
}

puis je compile avec :

g++ -o test test.cpp

et là, le drame :

test.cpp:1:29: error: vtkSphereSource.h: No such file or directory
test.cpp:2:22: error: vtkActor.h: No such file or directory

j'ai essayé de multiples bidouilles, en particulier :
rajouter -I/usr/local/include/vtk-5.0 en option de compilation
ou
faire un export LD_LIBRARY_PATH=/usr/local/include/vtk-5.0/ dans le bash juste avant la commande g++
ou encore
faire un export LD_LIBRARY_PATH=/usr/local/lib
et d'autres trucs de la même veine. en ligne de commande, dans .bashrc / .shrc / .bash-profile, ...
bref.

je sèche, là. je pense que VTK s'est bien installée et tout, car j'ai laissé Synaptic faire sous Ubuntu et suivi plusieurs tutos sur l'installation MacOSX. le problème arrive toujours, il doit donc provenir d'ailleurs, non ?

voilà voilà.
je suis preneur de n'importe quel opinion ...

merci d'avance pour apporter votre aide à un mauvais !

Dernière modification par SamheG (Le 12/07/2007, à 09:51)

#2 Le 11/07/2007, à 08:40

pacome

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

Salut

Ça va plutôt bien, merci! lol

Concernant ton problème je me contenterai d'un avis "général" paske je ne connais pas les librairies VTK et que j'en ai encore pour une 20aine de minutes de mise à jour (je ne peux donc pas lancer synaptic)...

Les fichiers d'en-tête (.h) se trouvent en général dans les paquets -dev, puisqu'ils servent au développement (i.e. la compilation), alors que les librairies peuvent être utilisées indépendamment (dynamiquement) par un programme compilé.

Si le répertoire /usr/local/include/vtk-5.0 contient les fichiers nécessaires, l'option -I devrait suffire; s'ils sont dans un sous-répertoire il faut donner le chemin complet.
La variable LD_LIBRARY_PATH contient les chemins des librairies à utiliser pour le link, dernière phase de la compilation.

A+

edit:
j'ai écrit des bétises à propos de LD_LIBRARY_PATH: elle concerne les librairies dynamiques lors de l'exécution du programme; le chemin des librairies à la compilation est fourni (si non-standard) par les options -L.

Dernière modification par pacome (Le 11/07/2007, à 08:59)

Hors ligne

#3 Le 11/07/2007, à 09:18

littleblackdog

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

ah, ben ça me fait plaisir que tu ailles bien. merci pour ton opinion smile

hmm.. le paquet -dev, je suis presque sûre que je l'ai installé mais n'y mettrais pas ma main à couper. je vérifie ça dès que je peux.
malheureusement ça m'aide pas pour problème Mac, et c'est sur Mac qu'il faut au final que ça marche (because je suis en stage en ce moment). mais bon,,  savoir comment ça fonctionne sur Linux m'importe davantage.

cependant je me pose deux questions pour y voir plus clair :
- le répertoire qu'il faut indiquer pour que gcc/g++ aille y chercher les librairies, c'est celui qui contient les .a, ou bien les .h ?
- cette fameuse édition de lien.. je sais qu'elle se fait entre les .o et les exécutables d'un projet ... comment ça se traduit pour un petit programme comme le mien ? ma commande de gcc suffit, est-ce que tout est bien sensé fonctionner correctement ?

je pense que je vais tenter de faire un makefile, pour être sûr.. même si j'ai la sensation de m'égarer.

#4 Le 11/07/2007, à 09:21

littleblackdog

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

au fait, si j'ai demandé ça :

littleblackdog a écrit :

- le répertoire qu'il faut indiquer pour que gcc/g++ aille y chercher les librairies, c'est celui qui contient les .a, ou bien les .h ?

..c'est juste pour dire.
j'ai essayé de mettre les deux répertoires (celui des .a et celui des .h) derrière -L, mais toujours le même "No such file or directory" ...

#5 Le 11/07/2007, à 10:21

pacome

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

Je ne pourrais pas t'aider sur une spécificité Mac, mais voici un résumé rapide concernant la compilation C/C++.

Fichiers principaux:
- .h : fichiers "d'en-tête" (header) contenant les déclarations,
- .c, .cpp : fichiers "source" contenant le code,
- .o : fichier "objet" résultat de compilation partielle,
- .a : librairie statique (archive),
- .so: librairie dynamique (shared object).

Étapes principales:
- preprocessing: inclut les .h et remplace les macros (#define),
- compilation partielle: transforme le résultat précédent (.i) en code-objet,
- édition de lien: relie les objets entre eux, et éventuellement les libriairies, pour produire l'exécutable.

Ton problème se situe à la première étape: le compilateur ne trouve pas les .h dans les chemins standards; il faut donc lui indiquer le chemin avec l'option de compilation -I/chemin/vers/en-têtes.
Vérifie que le répertoire que tu indiques (/usr/local/include/vtk-5.0/) contient bien les fichiers vtkSphereSource.h et vtkActor.h et qu'ils sont lisibles (permissions).

Il faudra sans doute aussi indiquer le chemin vers la(les) librairie(s) avec l'option -L/chemin/vers/libriaires pour la phase d'édition de liens.

Dans les deux cas, tu peux fournir plusieurs chemins avec autant de -I/chemin1, -I/chemin2 que nécessaire.

Tu peux compiler en ligne de commande ou te faire un makefile. Le makefile est plus pratique si ton projet grossit (plusieurs fichiers à compiler) et/ou si les options de compilation sont un peu longues, et bien sûr si tu dois faire un portage sur mac.

Hors ligne

#6 Le 11/07/2007, à 10:40

littleblackdog

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

okay ! bon, je me la suis joué bourrine, tant pis pour la portabilité.. j'y repenserai plus tard.

comme d'hab', je me suis enflammée et j'ai tout essayé sauf le truc qui va à coup sûr: faire des #include "<chemin d'accès complet depuis la racine>" en début de fichier. et là, problème reglé ...

..enfin presque.
que je vous explique : voici mon fichier test.c en son état actuel :

#include "/usr/local/include/vtk-5.0/vtkSphereSource.h"
#include "/usr/local/include/vtk-5.0/vtkPolyDataMapper.h"
#include "/usr/local/include/vtk-5.0/vtkActor.h"
#include "/usr/local/include/vtk-5.0/vtkRenderWindow.h"
#include "/usr/local/include/vtk-5.0/vtkrenderer.h"
#include "/usr/local/include/vtk-5.0/vtkRenderWindowInteractor.h"

int main ()
{
  vtkSphereSource *sphere = vtkSphereSource::New();
  sphere->SetRadius(1.0);
  sphere->SetThetaResolution(18);
  sphere->SetPhiResolution(18);

  vtkPolyDataMapper *map = vtkPolyDataMapper::New();
  map->SetInput(sphere->GetOutput());

  vtkActor *aSphere = vtkActor::New();
  aSphere->SetMapper(map);

  vtkRenderer *ren1 = vtkRenderer::New();
  vtkRenderWindow *renWin = vtkRenderWindow::New();
  renWin->AddRenderer(ren1);

  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
  iren->SetRenderWindow(renWin);

  ren1->AddActor(aSphere);
  ren1->SetBackground(1,1,1);

  renWin->Render();

  iren->Start();

  return 1;
}

un peu comme avant, compilation avec :

g++ -o test test.cpp -Wno-deprecated

(la dernière option c'est pour enlever un message d'erreur bizarre que je n'ai pas compris. le voici, desfois que un(e) de vous puisse m'éclairer sur le sujet, même si ça n'a pas l'air important ...

warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

.. mais bon, vu que le problème est reglé je ne m'en occupe plus)

dernier souci (j'espère), cette compilation me sort :

/usr/bin/ld: Undefined symbols:
vtkRenderer::New()
vtkRenderer::AddActor(vtkProp*)
vtkRenderWindow::New()
vtkSphereSource::New()
vtkPolyDataMapper::New()
vtkPolyDataMapper::SetInput(vtkPolyData*)
vtkPolyDataAlgorithm::GetOutput()
vtkRenderWindowInteractor::SetRenderWindow(vtkRenderWindow*)
vtkRenderWindowInteractor::New()
vtkActor::New()
collect2: ld returned 1 exit status

hmm
je me renseigne sur le net, 'vais bien voir si je trouve quelque chose ...

ça sent la résolution !!

#7 Le 11/07/2007, à 11:12

pacome

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

littleblackdog a écrit :

faire des #include "<chemin d'accès complet depuis la racine>" en début de fichier. et là, problème reglé ...

Ok, mais c'est un peu "bourrin" aussi: si tu veux le compiler sur une autre machine (un Mac?), les chemins risquent d'être différents et tu sera obligé(e?) de tous les modifier... d'où l'intérêt de l'option -I; et je ne vois pas pourquoi ça ne fonctionnerait pas puisque ça compile avec les chemins "en dur"...
Tu as bien essayé la commande:

g++ -I/usr/local/include/vtk-5.0 -o test test.cpp

(sans les chemins "en dur", bien sûr)?

Les dernières erreurs que tu obtiens concernent l'édition de lien (ld): elles devraient se résoudre en donnant le chemin jusqu'à la librairie, donc (si elle se trouve dans /usr/local/lib/vtk-5.0):

g++ -I/usr/local/include/vtk-5.0 -L/usr/local/lib/vtk-5.0 -o test test.cpp

Hors ligne

#8 Le 11/07/2007, à 14:02

littleblackdog

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

merci bien, monsieur/madame/mademoiselle pacome, pour tes explications, je vois tout ça de façon plus claire. non vraiment, les docs que j'ai pu lire sont d'accord avec toi, ce sont effectivement les options -I et -L qu'il est nécessaire d'utiliser.

seulement ça ne fonctionne pas : en particulier, tant qu'on ne s'intéresse qu'à la génération de test.o ("g++ -Wno-deprecated -I/usr/local/include/vtk-5.0 -c test.cpp") et qu'on laisse les #include en dur, tout fonctionne bien, avec ou sans l'option -I. mais dès qu'on les enlève, g++ me sort des "machin was not declared in this scope", même avec l'option -I bien formée et tout.
quand à l'inclusion des librairies .a avec -L, ça ne fonctionne pas non plus.

ça doit être parce que je fais mes tests sur un Mac.. seulement, le man g++ ne parle pas d'exceptions à ces deux options, alors je me demande ce qu'on m'a refilé comme machine pour mon stage. neutral

et je vérifie tout ça sur un bon Ubuntu des familles à qui on peut faire confiance dès que je retrouve mon ordi perso.

merci encore, et à bientôt pour l'épilogue -heureux, j'espère ! smile

Hors ligne

#9 Le 11/07/2007, à 14:36

toto4455

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

par exemple pour compiler le code d'exemple de vtk

http://www.vtk.org/example-code.php

if faut modifier code  et rajouter :

#include "vtkProperty.h"

et change le void main en int .

pour la compilation  (en partant d'une installe avec le paquet vtk5 et dev d'ubuntu ) :

  g++ -o testvtk testvtk.cpp -I/usr/include/vtk-5.0/ -Wno-deprecated -lvtkGraphics -lvtkRendering

et ca passe tres bien .

#10 Le 11/07/2007, à 17:01

pacome

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

littleblackdog a écrit :

merci bien, monsieur/madame/mademoiselle pacome, pour tes explications, je vois tout ça de façon plus claire. non vraiment, les docs que j'ai pu lire sont d'accord avec toi, ce sont effectivement les options -I et -L qu'il est nécessaire d'utiliser.

Ben je t'en prie (je suis un pacome wink), c'est effectivement ce que j'ai appris, lu et expérimenté; et je ne comprends pas pourquoi ça ne fonctionne pas sur un Mac...

As-tu essayé le test proposé par

toto4455 a écrit :

par exemple pour compiler le code d'exemple de vtk

http://www.vtk.org/example-code.php

g++ -o testvtk testvtk.cpp -I/usr/include/vtk-5.0/ -Wno-deprecated -lvtkGraphics -lvtkRendering

(-lkelkechoz correspond à "lier avec la librairie libkelkechoz" dans laquelle sont définies les fonctions que tu utilises dans ton code)?

Il y a peut-être une astuce à connaître pour compiler sur Mac: une question à poser sur le forum (sur Mac) ou à la personne qui t'a "refilé" cette machine.

A+

Hors ligne

#11 Le 12/07/2007, à 09:22

littleblackdog

Re : [Résolu] mauvais import des librairies VTK ? autre chose ?

okay, bon : problème reglé ! smile

hier soir j'ai effectivement essayé d'ajouter les options -lvtkXXX à l'édition de lien, dont j'ignorais l'utilité je l'avoue (pour moi -L<chemin> suffisait, je pensais que g++ trouvait tout seul la librairie qu'il fallait.. mea culpa roll) : mais même ça ça ne fonctionnait pas. bon, j'en avais marre aussi, donc j'ai pas fait particulièrement d'effort autre que rajouter tous les -lvtkXXX possibles d'après les libvtkXXX.a que je voyais dans /usr/local/lib/ -possible que j'aie oublié quelque chose.

mais ce matin j'ai décidé d'utiliser l'outil cmake. j'ai fait un CMakeLists.txt d'après exemple, lancé le truc avec l'exemple de la sphere, utilisé le makefile produit, et ça a fonctionné. gotcha !

point positif de tout ceci : le mécanisme de compilation est à nouveau plus clair dans ma tête, et j'ai découvert un outil 'achement pratoche.
point négatif : je sais toujours pas quel était le problème ('faut que je pense à regarder le makefile produit par cmake quand j'ai le temps), et c'est un coup à devenir dépendant de cmake sans savoir faire de truc un peu compliqué seule. hmm

en tout cas, merci à vous deux, monsieur pacome et toto pour votre aide ! c'était super sympa !

Dernière modification par littleblackdog (Le 12/07/2007, à 09:26)

Hors ligne