Retourner aux forums || Retourner au forum Programmation.c++
Programmation.c++ : ACML
Posté par eric () le 27 novembre 2007je code en c++ avec eclipse et j'ai besoin des fonction blas et lapack ,
je télécharge donc ACML, les librairie blas et lapack optimiser pour/par AMD, je décompresse et j'installe
celle ci est installer dans /opt/acml3.6.0/
dans mon code c++ j'ajoute #include </opt/acml3.6.0/gfortran32/include/acml.h>
dans eclipse , propriété de mon projet , j'ajoute dans C++ Build/Gcc C++ Linker/Librairies et Librairies acml ( ce qui équivaut a faire un -lacml dans les argument G++)
le code se compile sans souci :
**** Build of configuration Debug for project test ****
make -k all
Building file: ../Source/test.cpp
Invoking: GCC C++ Compiler
g++ -I/opt/acml3.6.0/gfortran32/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Source/test.d" -MT"Source/test.d" -o"Source/test.o" "../Source/test.cpp"
Finished building: ../Source/test.cpp
Building target: test
Invoking: GCC C++ Linker
g++ -Wl,-soname=libacml.so -o"test" ./Source/New.o ./Source/test.o -lacml -lGLEW -lgfortran -lglut
Finished building target: test
Build complete for project test
dans mon code , plus aucunes erreurs (avant de linker acml , les fonction sgemv, dgemv rapporter l'erreur "non declaré")
je lance mon exécutable... et PAF :
/home/vieurou/EclipseWorkspace/test/Debug/test: symbol lookup error: /home/vieurou/EclipseWorkspace/test/Debug/test: undefined symbol: sgemv
si quelqu'un a une idée , plus de deux jour que je bloque rien que pour utiliser ce ACML
merci d'avance
> Lire le message (7 commentaires, moyenne: 1,3).
oublie
j'ai oublié de préciser que dans les propriétés du projet j'ai ajouté "libacml.so" dans le section GCC C++ Linker / Shared Library Setting / Shared object nme (-Wl, -soname=)
lorsque je retire cela (cela donne la commande "g++ -o"test" ./Source/New.o ./Source/test.o -lacml -lGLEW -lgfortran -lglut") ça compile aussi mais des le lancement de test j'ai " error while loading shared libraries: libacml.so: cannot open shared object file: No such file or directory" comme message d'erreur
... au secours ...
-
[^]Re: oublie
Posté par eric () le 27/11/2007 à 16:39. (lien). Évalué à 1.encore autre chose :
j'ai fait un ldd de l'applie compilé, voilà ce que cela me donne quand je compille sans -Wl, -soname=libacml.so
ldd ./test
linux-gate.so.1 => (0xffffe000)
libacml.so => not found
libGLEW.so.1.3 => /usr/lib/libGLEW.so.1.3 (0xb7efe000)
libgfortran.so.1 => /usr/lib/libgfortran.so.1 (0xb7e84000)
libglut.so.3 => /usr/lib/libglut.so.3 (0xb7e52000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7d68000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d41000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7d35000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7bf4000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0xb7b73000)
libGL.so.1 => /usr/lib/libGL.so.1 (0xb7add000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb79ec000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb79de000)
/lib/ld-linux.so.2 (0xb7f49000)
libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb7046000)
libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb7043000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb703f000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb703c000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7037000)
et quand j'ajoute -Wl, -soname=libacml.so, j'ai
ldd ./test
linux-gate.so.1 => (0xffffe000)
libGLEW.so.1.3 => /usr/lib/libGLEW.so.1.3 (0xb7f4e000)
libgfortran.so.1 => /usr/lib/libgfortran.so.1 (0xb7ed5000)
libglut.so.3 => /usr/lib/libglut.so.3 (0xb7ea2000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7db8000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d91000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7d85000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7c44000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0xb7bc4000)
libGL.so.1 => /usr/lib/libGL.so.1 (0xb7b2d000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7a3c000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb7a2e000)
/lib/ld-linux.so.2 (0xb7f99000)
libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb7096000)
libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb7094000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb708f000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb708c000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7087000)
hypothese au hasard...
tu compiles en mettant la libraire en statique ou en dynamique ?
si elle est en dynamique il faut penser à mettre les .so dans le chemin du ldconfig (/usr/local/lib me semblerait approprié)
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
-
[^]Re: hypothese au hasard...
Posté par eric () le 27/11/2007 à 16:45. (lien). Évalué à 1.ben an fait , je sais pas trop les différences entre librairie static et dynamique ...
autrement après des recherches sur le net , j'ai ajouté "/opt/acml3.6.0/gfortran32/lib"au LD_LIBRARY_PATH, mais pas d'amélioration
je sait pas si c'est ce que tu me propose ici ???-
[^]Re: hypothese au hasard...
Posté par eric () le 27/11/2007 à 16:57. (lien). Évalué à 1.j'ai fait un "sudo kate /etc/ld.so.conf"
j'ajoute "/usr/local/lib & /opt/acml3.6.0/gfortran32/lib"
j'enregistre
je fait un sudo ldconfig
je test
ÇA MARCHE
MERCI PLEIN DE FOIS, ça fait plaisir quand y a plus d'erreur...-
[^]Re: hypothese au hasard...
Posté par NeoX () le 27/11/2007 à 17:08. (lien). Évalué à 2.ca marche en effet car ta libacml.so est maintenant referencée (grace au ldconfig)
pour utilisé ton programme sur d'autre machine, il faudra donc mettre veiller à ce que le libacml.so soit installé.
difference entre librairie statique/dynamique :
statique : tu inclues la librairie dans ton programme, le binaire est donc plus gros, mais tu es independant des mises à jours de librairies qu'il y aurait sur le systeme.
dynamique : (notre cas actuellement), tu dis au programme d'utiliser une librairie qu'il devra trouver sur le systeme, le binaire est donc plus leger, mais il faut s'assurer que la lib est dispo sur le systeme ou tu veux utiliser ton programme.--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux-
[^]Re: hypothèse au hasard...
Posté par eric () le 27/11/2007 à 17:17. (lien). Évalué à 1.merci pour ces éclaircissement
donc je préfère quels soit static , d'après ce que j'ai compris je n'est qu'as ajouter dans ma commande G++ l'argument -static?
je viens de tester , et apparemment faut également faire autre chose car G++ me retourne une erreur :
**** Build of configuration Debug for project test ****
make -k all
Building target: test
Invoking: GCC C++ Linker
g++ -static -o"test" ./Source/New.o ./Source/test.o -lacml -lGLEW -lgfortran -lglut
/usr/bin/ld: cannot find -lacml
collect2: ld a retourné 1 code d'état d'exécution
make: *** [test] Erreur 1
make: La cible « all » n'a pas pu être refabriquée à cause d'erreurs.
Build complete for project EcoLib_OGL
-
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c++


Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.