je 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
# oublie
Posté par eric . Évalué à 1.
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 . Évalué à 1.
j'ai fait un ldd de l'applie compilé, voilà ce que cela me donne quand je compille sans -Wl, -soname=libacml.so
et quand j'ajoute -Wl, -soname=libacml.so, j'ai
# hypothese au hasard...
Posté par NeoX . Évalué à 2.
si elle est en dynamique il faut penser à mettre les .so dans le chemin du ldconfig (/usr/local/lib me semblerait approprié)
[^] # Re: hypothese au hasard...
Posté par eric . Évalué à 1.
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 . Évalué à 1.
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 . Évalué à 2.
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.
[^] # Re: hypothèse au hasard...
Posté par eric . Évalué à 1.
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 :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.