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

Windows Discussion :

Compiler la libssh2 sous XP


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 59
    Points
    59
    Par défaut Compiler la libssh2 sous XP
    Bonjour à tous,

    J'essaie de compiler la libssh2 sous WinXP SP3 avec plus ou moins de bonheur avec visual studio express 2008. Lorsque j'ai ouvert le projet fournis dans le répertoire win32, VS2008 à fait des conversions, tout à semblé se passer correctement. J'ai installé les dépendances, libz et openssl, apparemment tout c'est bien passer aussi. J'ai configurer VS2008 pour qu'il accède au librairies et au include d'openssl et libz. Lorsque j'essaie de compiler libssh_dll, j'ai 16 fois la même erreur:

    c:\openssl\include\openssl\ossl_typ.h(178) : error C2059: erreur de syntaxe*: 'type'

    La ligne 178 du fichier incriminé n'est pas très explicite sur le sujet, et Google ne pas beaucoup aidé la dessus...

    Quelqu'un saurait-il pourquoi j'ai cette erreur?

    D'avance merci pour toute aide

  2. #2
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Salut,

    Je ne sais pas si ça va t'aider mais j'ai le même problème.

    En fait, j'ai réussi à compiler la librairie sous VC6 mais en compilant avec VS2008, j'ai le même message d'erreur.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci de ton coup de main.

    Bon, j'ai résolu ce problème en changeant de version d'openssl et en corrigeant mes directives de précompilations, et maintenant la lib et la dll compile. Mais le problème ce déplace. Dans la solution libssh2 il y a aussi un projet "test" pour voir si ça tourne. ça ne veut pas compiler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1>..\include\libssh2.h(561) : error C2061: erreur de syntaxe*: identificateur 'libssh2_channel_read_ex'
    1>..\include\libssh2.h(561) : error C2059: erreur de syntaxe*: ';'
    1>..\include\libssh2.h(561) : error C2059: erreur de syntaxe*: 'type'
    1>..\include\libssh2.h(584) : error C2061: erreur de syntaxe*: identificateur 'libssh2_channel_write_ex'
    1>..\include\libssh2.h(584) : error C2059: erreur de syntaxe*: ';'
    1>..\include\libssh2.h(584) : error C2059: erreur de syntaxe*: 'type'
    la ligne 561 ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LIBSSH2_API ssize_t libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel,
                                                int stream_id, char *buf,
                                                size_t buflen);
    D'après mes recherches, il peut y avoir une histoire de référence cyclique avec des .h, ou bien le fait que l'on ai implémenté des fonctions dans un .h ou un .c au lieu d'un .cpp. J'avoue être un peu pommé....

    J'ai échangé quelque mails avec les dev du projet, chez eux ça marche sans problèmes avec Visual Studio 6, mais l'un d'eux est sous 2008, et ça tourne aussi. On a vérifié les directives de précompilations, les dossiers d'include et de librairies.

    Si ça ne vient pas du code source, puisque sous Visual Studio 6 ça fonctionne, qu'est-ce que ça peut être?

    D'avance merci pour toute aide

  4. #4
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Merci ça à fonctionner directement. C'est cool

    Par contre je n'arrive à trouver la méthode pour me connecter à un serveur.
    Dans la doc de libssh, ils donnent une méthode pour se connecter.

    Mais pour arriver à cela, il me faut une socket. Je ne sais pas quoi et comment lui fournier cette information.

    scolyo, aurais tu un exemple de création de socket avec une utilisation de libssh.

    Merci d'avance

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    Salut Vanitom,

    Tu as réussi sous VS2008? Si oui, ça m'intéresse, si non, ou est-ce que je peux trouver uneversion, même d'eval de VS6?

    Sinon, pour l'utilisation de la lib:

    http://www.libssh2.org/wiki/index.php/SSH2:Overview

    http://www.libssh2.org/doc

    J'ai essayer de faire ça, mais je ne peux pas le compiler, toujours avec ce souci sous VS2008:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #include "stdafx.h"
    #include <libssh2.h>
    #pragma comment (lib, "libssh2.lib")
    
    
    int connect_to_host(const char *hostname, int port);
    //{
    	/*Connect to a remote host using normal socket operation*/
    //	return localSocketVar
    //}
    /*int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }*/
    
    int main(void)
    {
    	int sock;
    	LIBSSH2_SESSION *session;
    	//Connect...
    	sock = connect_to_host("mamachine.mondomaine.fr", 22);
    	session = libssh2_session_init();
    
    	if (libssh2_session_startup(session, sock) ==0 ) {
    		printf("The connection is successfull");
    	}else {
    		printf("The connection failed, exiting...");
    		return 0;
    	}
    	
    	//autentification...
    	if (libssh2_userauth_password(session, "test", "test") ==0) {
    		printf("Authentication successfull");
    	}else {
    		printf("Autentication failed, exiting...");
    		return 0;
    	}
    
    	//Opening channel
    	LIBSSH2_CHANNEL *channel;
    	if (!(channel = libssh2_channel_open_session(session))) {
    		printf("Opening channel failed, exiting...");
    		return 0;
    	}else {
    		//launching a shell in this channel
    		libssh2_channel_shell(channel);
    	}
    
    	//Type exit in the remote shell and press enter
    	printf("Launching the exit command and exiting...");
    	libssh2_channel_write(channel, "exit\n", strlen("exit\n"));
    	printf("Closing the channel...");
    	libssh2_channel_close(channel);
    	libssh2_channel_free(channel);
    	libssh2_session_disconnect(session, "Goodbye");
    	libssh2_session_free(session);
    
    	return 0;
    }
    Toujours l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(561) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'libssh2_channel_read_ex'
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(561) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(563) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(584) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'libssh2_channel_write_ex'
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(584) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>\C\libssh2-1.0.1-20090109\include\libssh2.h(586) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    D'ailleur, si quelqu'un à une explication sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //{
    	/*Connect to a remote host using normal socket operation*/
    //	return localSocketVar
    //}
    ça m'intéresse aussi

    D'avance merci

  6. #6
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Hier soir j'ai trouvé comment lancer une commande. Mais je n'ai encore réussi pour récupérer la réponse. Cependant on ne me demande pas encore de réponse alors je vais laisser passer.

    Voici tout mon code de test. C'est une petite adaptation d'un code d'exemple que tu dois avoir dans ton répertoire SSH :
    <dir_libssh>\example\simple\ssh2.c
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    int sock;
    LIBSSH2_SESSION *session;
    LIBSSH2_CHANNEL *channel;
    const char *username="<ton_login>";
    const char *password = "<ton_password>";
    
    struct sockaddr_in sin;
    WSADATA wsadata;
    
    WSAStartup(MAKEWORD(2,0), &wsadata);
    sock = socket(AF_INET, SOCK_STREAM, 0);
    
    sin.sin_family = AF_INET;
    sin.sin_port = htons(22);
    sin.sin_addr.s_addr = inet_addr ( "<ton_serveur>" );
    if (connect(sock, (struct sockaddr*)(&sin),
                sizeof(struct sockaddr_in)) != 0) {
        fprintf(stderr, "failed to connect!\n");
        return;
    }
    
    
    
    
    /* Connect */
    session = libssh2_session_init();
    if (libssh2_session_startup(session, sock)) {
        /* Connection failure */
    	ASSERT ( FALSE );
    } else {
        /* Connection success */
    }
    
    libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
    
    if (libssh2_userauth_password(session, username, password))
    {
    	char * msg;
    	int nLen;
    	libssh2_session_last_error ( session, &msg, &nLen, 0 );
    	ASSERT ( FALSE );
    }
    
    channel = libssh2_channel_open_session(session);
    if ( !channel )
    {
    	ASSERT ( FALSE );
    }
    
    if (libssh2_channel_shell(channel))
    {
    	ASSERT ( FALSE );
    }
    
    
    char * cmd = "touch boo &\n";
    if ( libssh2_channel_write(channel, cmd, strlen(cmd)) == 0 )
    {
    	char * msg;
    	int nLen;
    	libssh2_session_last_error ( session, &msg, &nLen, 0 );
    	ASSERT ( FALSE );
    }
    
    
    if (channel) {
    	libssh2_channel_close(channel);
        libssh2_channel_free(channel);
        channel = NULL;
    }
    
    libssh2_session_disconnect(session, "Normal Shutdown, Thank you for playing");
    libssh2_session_free(session);
    
    
    Sleep(1000);
    closesocket(sock);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    N'y-a-il pas un endroit où trouver libssh2 déjà compilée ??? ça serait plus simple je ne comprends pas l'intérêt de devoir partir forcément des sources.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 153
    Points : 12 264
    Points
    12 264
    Par défaut
    Pour les choix de customisation à la "compile-time"
    Pour ne pas avoir de problèmes de link avec le compilateur de l'exe
    etc...

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/09/2005, 21h09
  2. [Tomcat]comment compiler les servlets sous eclipse et tomcat
    Par boussaad dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 31/03/2005, 15h29
  3. Compiler un code sous windows
    Par KORTA dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 30/09/2003, 16h53
  4. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43
  5. [Installation] Borland Compiler 5.5 sous XP
    Par Ligey dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 28/09/2002, 22h45

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