Retourner aux forums || Retourner au forum Programmation.c++

Programmation.c++ : ACML

Posté par eric () le 27 novembre 2007
0
bonjour ,

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

> Lire le message (7 commentaires, moyenne: 1,3).  

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.

oublie

Posté par eric () le 27/11/2007 à 16:30. (lien). Évalué à 1.

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...

Posté par NeoX () le 27/11/2007 à 16:38. (lien). Évalué à 2.

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++