Forum Programmation.c++ ACML

Posté par  .
Étiquettes :
0
27
nov.
2007
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
  • # oublie

    Posté par  . É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  . É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  . É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é)
    • [^] # Re: hypothese au hasard...

      Posté par  . É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  . É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  . É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.
          • [^] # Re: hypothèse au hasard...

            Posté par  . É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

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.