IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Soucis au niveau de mon RInside


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Soucis au niveau de mon RInside
    Bonjour à toutes à tous,

    Actuellement je suis sur un code en C++ sur codeBlocks.
    Voilà un extrait de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream>
    #include <RInside>
    #include <stdio.h>
    #include <stdlib.h>
    //#include <R.h>
    //#include <Rmath.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        RInside R(argc, argv);
        R["txt"]= "Hello, world!\n";
        R.parseEvalQ("cat(txt)");
    //    cout << "Hello world!" << endl;
        return 0;
    }
    Et j'obtiens comme erreurs:

    Bien cordialement
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Je ne connais pas Code::Block, mais tu dois manifestement configurer ton projet concernant les chemins vers les include.

    Ou alors utiliser des guillemets plutôt que des chevrons et donner un chemin relatif adéquat.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Je ne crois pas que ce soit les guillemets, mais plutôt le chemin concernant les includes.
    Je viens de télécharger le fichier Zip du RInside. Que dois je faire à ce niveau?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    J'avais conseillé de faire une recherche sur le forum C++, pas nécessairement de poser la question ici : c'est un problème qui a déjà été posé plusieurs fois
    http://www.developpez.net/forums/d11...-dossier-type/
    http://www.developpez.net/forums/d83...h-sous-ubuntu/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    As-tu résolu ton soucis de RInside ?
    Je suis moi même face à un soucis à ce niveau.
    J'utilise également CodeBlocks, sous Windows 7.
    A priori, mon soucis n'est pas dans le chemin des #include, mais plutot dans le linkage des lib...

    Voici les erreurs à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    obj\Release\main.o:main.cpp|| undefined reference to `Rf_mkString'|
    obj\Release\main.o:main.cpp|| undefined reference to `Rcpp::Environment::assign(std::string const&, SEXPREC*) const'|
    C:\R\R-2.13.1\library\RInside\lib\i386\libRInside.a(RInside.o):RInside.cpp|| undefined reference to `Rf_protect'|
    C:\R\R-2.13.1\library\RInside\lib\i386\libRInside.a(RInside.o):RInside.cpp|| undefined reference to `Rf_cons'|
    etc...


    Je fait bien le lien vers les lib de RInside et de Rcpp mais n'ai pas de lib pour R pur...

    Quelqu'un a-t-il la solution ou une piste de réflexion ?
    Merci d'avance et bonne journée

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    A mon avis tu as oublié de référencer des lib (pas dans les includes, mais dans tes options de link)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Je pense aussi qu'il me manque un ou plusieurs link vers des lib !
    Mais je n'arrive à savoir quelles lib (en plus de libRInside.a et libRcpp.a) sont à linker...
    As-tu déjà utilisé RInside ?

    Merci en tout cas

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Non, je répondais d'un point de vue général...

  9. #9
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Citation Envoyé par Pinou08 Voir le message
    Je fait bien le lien vers les lib de RInside et de Rcpp mais n'ai pas de lib pour R pur...
    Tu as la lib de R a inclure (de mémoire R.dll ou libR.dll)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Merci de ta réponse.

    J'ai effectivement ajouté le lien vers la dll R.dll, mais Code blocks ou mon compilateur ne semble pas accepter les fichiers dll (mes autres lib sont en *.a)

    voici l'erreur à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\R\R-2.13.1\bin\x64\R.dll: file not recognized: File format not recognized
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 2 seconds)
    0 errors, 0 warnings
    Existe-t-il un moyen de "convertir" cette dll en .a ? ou bien faut il configurer code blocks différement ?

    Merci de votre aide

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Elle serait pas 64 bits au lieu de 32? Genre ton env de build est 32 bits et t'as pris par mégarde la dll 64?

  12. #12
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Tu inclues le dll comment ? De mémoire, avec gcc/mingw, j'ajoutais simplement -l R.dll -Lc:/bla/bla/blaSinon, tu peux utiliser Dependency Walker pour connaître les dll nécessaire au programme.

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Citation Envoyé par Pinou08 Voir le message
    Existe-t-il un moyen de "convertir" cette dll en .a ?
    Oui mais c'est atrocement compliqué. Réservé aux experts qui savent ce qu'ils font et uniquement quand c'est impossible de faire autrement.

    J'ai personnellement arrêté d'utiliser GCC+MinGW sur Windows car la compilation avec cette plateforme est tout simplement désastreuse, le résultat pas terrible en performance et l'intégration à windows vraiment mauvaise. MinGW, c'est bien pour porter des soft GNU sur Windows, mais si tu es l'auteur de ton programme, je te conseille plutôt de compiler avec cl (le compilo de microsoft) que tu peux avoir gratuitement en installant Visual C++ Express. Il y a même moyen d'avoir la version 64 bits. Il suffit de lancer CodeBlocks depuis une invite Visual Studio Command Prompt pour que celui-ci bénéficie des bonnes variables d'environnement.

    Je sais, ça ne résout pas ton problème directement, et tu ne pourras peut être pas si tu as des libs GNU dans ton code, c'est juste un conseil.
    Find me on github

  14. #14
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    J'irai même jusqu'à dire que l'idéal est d'avoir un système d'intégration continue qui va compiler avec plusieurs compilateur (gcc, vc, icc...), lancer les tests, etc. etc.
    Sauf que...
    Dans ce cas, a priori, RInside utilise Rcpp qui n'est pas compatible avec Visual (voir la FAQ chapitre 2.7).

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    J'irai même jusqu'à dire que l'idéal est d'avoir un système d'intégration continue qui va compiler avec plusieurs compilateur (gcc, vc, icc...), lancer les tests, etc. etc.
    Oui, CMake + CTest fait bien l'affaire, mais j'évite de faire trop vite du prosélytisme pour ne pas faire peur à l'op .

    Citation Envoyé par gbdivers Voir le message
    Dans ce cas, a priori, RInside utilise Rcpp qui n'est pas compatible avec Visual (voir la FAQ chapitre 2.7).
    Bah, avec les headers et les DLLs, on doit bien pouvoir faire ce qu'on veut non ? L'op ne veut pas compiler lui même la lib que je sache, ou bien il peut le faire dans une étape indépendante.

    Edit : Le post est marqué résolu ? Tu peux nous dire comment tu as fait Pinou finalement ?
    Find me on github

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Ce qui me chiffonne, c'est quand même qu'habituellement les problèmes d'ABI se soldent par des erreurs de linkage (symbol not found) pas par un brutal "bad file format" c'est pour ça que je me demandais si on n'avait pas affaire à un binaire 64 bits au milieu d'un environnement 32 (ou l'inverse, mais vu le chemin posté par l'OP)

  17. #17
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Je pensais plus à une erreur dans la façon de linker la dll dans code block (par exemple, la dll qui serait ajoutée à la liste des fichiers à compiler, comme un .cpp)

    Bref, dans tous les cas, la conversion dll -> a n'est pas la bonne approche.
    Peut être qu'une copie d'écran de code block pourrait aider (ou alors le script invoquant les commande gcc)

    Citation Envoyé par jblecanard
    Oui, CMake + CTest fait bien l'affaire, mais j'évite de faire trop vite du prosélytisme pour ne pas faire peur à l'op .
    Je suis entrain de tester CDash à la place de Jenkins... mais j'évite aussi de faire trop de pub (c'est bien de garder nos techniques de sioux pour nous faciliter la vie... sinon après les débutants n'auront plus besoin de nous)

  18. #18
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Je pensais plus à une erreur dans la façon de linker la dll dans code block (par exemple, la dll qui serait ajoutée à la liste des fichiers à compiler, comme un .cpp)
    Si on voyait la ligne de commande on serait plus fixés...il les montre?

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci à tous, je fatigue pour ce soir, je m'y remet dès demain et vous tiens au courant !
    Concernant le post marqué en "Résolu", en réalité ce n'est pas moi qui ai lancé le sujet, donc pas moi qui l'ai résolu, je me suis juste incrusté dans la discussion, ayant un problème à peu près similaire

    A demain donc

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonjour à tous,

    Merci pour vos conseils ; Effectivement je n'avais pas prêté attention aux versions 32 ou 64 bits des libs que je linkais...En ne pointant que vers les libs 32 bits, je n'ai plus de soucis à la compilation
    Pour info, pour linker les libs dans Code Blocks, je passe par :
    Project > Build Options > Linker Settings > Link Libraries

    Donc plus de problème à la compil', en revanche une fenêtre d'erreur apparaît à l'execution :
    Fatal Error : Unable to open the base package
    Je pense qu'il s'agit d'un problème de répertoire... J'ajouterai qu'habituellement je travaille avec la version 64bits de R, pour le chargement des packages, etc. ; Et là, forcé, je pointe vers la lib 32bits ; je ne sais pas si ça vient de là...

    Pour info voici mon code cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <RInside.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        RInside R(argc, argv);
        R["txt"]= "Hello, world!\n";
        R.parseEvalQ("cat(txt)");
        cout << "Hello world!" << endl;
        return 0;
    }
    Une idée ??

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. soucis a niveau de mon code
    Par tahtah223 dans le forum Langage
    Réponses: 7
    Dernier message: 28/04/2015, 17h22
  2. souci aux niveau de mon formulaire
    Par bobigreen dans le forum Langage
    Réponses: 4
    Dernier message: 25/10/2012, 09h04
  3. [VB] soucis au niveau de la conception d'une dll activeX
    Par Viorika dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/06/2006, 11h35
  4. souci au niveau de l'ouverture des ports de mon routeur
    Par unix27 dans le forum Sécurité
    Réponses: 7
    Dernier message: 29/04/2006, 22h13
  5. Souci de fermeture de mon programme à la fermeture de Window
    Par Foromus dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 01/03/2006, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo