Précédent   Forum des professionnels en informatique > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2011, 11h27   #1
Invité régulier
 
Homme Quentin moisan
Consultant en Business Intelligence
Inscription : juin 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Quentin moisan
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : juin 2011
Messages : 28
Points : 9
Points : 9
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 :
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
Type de fichier : png erreur.png (25,3 Ko, 17 affichages)
Quentin15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 11h35   #2
Membre émérite
 
Inscription : novembre 2004
Messages : 1 560
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 560
Points : 849
Points : 849
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.
oodini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 11h45   #3
Invité régulier
 
Homme Quentin moisan
Consultant en Business Intelligence
Inscription : juin 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Quentin moisan
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : juin 2011
Messages : 28
Points : 9
Points : 9
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?
Quentin15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 12h04   #4
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 855
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 855
Points : 12 918
Points : 12 918
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/
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h30   #5
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2012
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 19
Points : 10
Points : 10
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 :
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
Pinou08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h40   #6
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
A mon avis tu as oublié de référencer des lib (pas dans les includes, mais dans tes options de link)
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h28   #7
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2012
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 19
Points : 10
Points : 10
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
Pinou08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h30   #8
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
Non, je répondais d'un point de vue général...
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 13h16   #9
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 855
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 855
Points : 12 918
Points : 12 918
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)
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/02/2012, 13h59   #10
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2012
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 19
Points : 10
Points : 10
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 :
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
Pinou08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h01   #11
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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?
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h18   #12
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 855
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 855
Points : 12 918
Points : 12 918
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.
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h16   #13
Membre Expert
 
Jean-Bernard
Inscription : mars 2007
Messages : 817
Détails du profil
Informations personnelles :
Nom : Jean-Bernard
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 817
Points : 1 251
Points : 1 251
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.
jblecanard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h24   #14
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 855
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 855
Points : 12 918
Points : 12 918
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).
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h31   #15
Membre Expert
 
Jean-Bernard
Inscription : mars 2007
Messages : 817
Détails du profil
Informations personnelles :
Nom : Jean-Bernard
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 817
Points : 1 251
Points : 1 251
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 ?
jblecanard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h39   #16
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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)
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h52   #17
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 855
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 855
Points : 12 918
Points : 12 918
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)
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h55   #18
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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?
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h32   #19
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2012
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 19
Points : 10
Points : 10
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
Pinou08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 09h29   #20
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2012
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 19
Points : 10
Points : 10
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 :
Citation:
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 :
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 ??
Pinou08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h15.


 
 
 
 
Partenaires

Hébergement Web