Compiler PWLIB avec Visual C++ 2005 Express Editio - Prob. avec windows.h

Salut à tous,

J’essais de réaliser un serveur de vidéoconférence en utilisant les codes sources du projet OpenH323 ( PWLIB , OpenH323, OpenMCU). Ma plateforme est sous Windows et j’utilise Microsoft Visual C++ 2005 Express Edition pour compiler mes sources.
Mais après plusieurs essais, le message d’erreurs suivant apparait :

------ Début de la génération : Projet : Console, Configuration : Release Win32 ------
Compilation en cours…
assert.cxx
c:\pwlib\include\ptlib\msos/ptlib/contain.h(264) : fatal error C1083: Impossible d’ouvrir le fichier include : ‘windows.h’ : No such file or directory
Le journal de génération a été enregistré à l’emplacement “file://c:\pwlib\Lib\Release\BuildLog.htm”
Console - 1 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

Impossible d’ouvrir le fichier include ‘windows.h’.

Quelqu’un a-t-il eu une expérience de ce genre ? Et sait-il comment le résoudre?
Merci.

Tu as installé le Plateform SDK et ajouté les LIB_PATH/INCLUDE_PATH dans l’environnement de VS2005 ?

Salut KarLKoX,

Merci de me repondre aussi rapidement .

Je n’ai pas installé le SDK mais il y le J2SE Update 9 que je viens d’installer mais j’ai vu que le SDK contient J2SE. Y a t-il autre chose en plus dans le SDK que ne contient pas le J2SE et qui pourrait m’etre utile ???

Sinon dans Outils > Options , j’ai rajouté les chemins vers les librairies et les includes.
Si c’est de ces champs dont tu me parles , c’est OK. Mais si c’est d’autres choses qu’il faudrait faire après avoir installer le SDK et là j’ai rien fait du tout !!! :non:

Merci de me répondre

Ouhla, tu es sur d’avoir déja programmé ? Parce que la, tu tente de compiler du C/C++ avec le SDK du Java qui est un autre langage de programmation et il n’a donc rien à voir avec ton problème.
En mettant “Plateform SDK” dans google, le premier donne ceci et c’est de ça que tu as besoin.
C’est une installation Web, donc connection rapide recommandée.
Apres, normalement, le SDK met à jour les variables d’environnements mais il arrive que ça bug donc si ça ne compile toujours pas apres l’installation de ce SDK, il te faudra ajouter les chemins des libs/includes comme tu l’as décrit dans Outils --> Options pour que ce soit global ou dans les préférences de ta solution pour que cela ne s’applique qu’à ton projet.

salut

Ok, je comprends maintenant. Comme tu as du le constater, je suis pas un pro de la programmation. J’ai besoin juste d’utiliser ces librairies pour mon projet.
Moi, j’utilise souvent Dev . Tu l’installes et t’as besoin de rien faire. Par contre je savais pas qu’il existait un SDK pour Win. J’ai un peu cherché et j’ai trouvé ce qu’il me manquait ! Je vais de ce pas l’essyez. Par contre ça fait 1 Go de données !!!

tankU

Même si tu utilises DevC++ (qui ne vaut plus rien façe à code::blocks ;)), si la lib utilise une bibliothèque tierce, tu devras l’ajouter de toute façon.
Bon, la il ne s’agit que du SDK de windows mais si tu as une lib qui utilise fmod ex par exemple, même en utilisant DevC++ il te faudra la télécharger et l’installer.
Je n’ai pas le souvenir que le Plateform SDK prenait autant de place, le répertoire, une fois installé ne prend que 70 mo chez moi :??:

Bonjour,

J’ai pu regler le probleme avec windows.h et compiler PWLIB . Merci pour ton aide KarlKox . Le probleme venait effectivement de Platform SDK que j’ai pu télécharger et installer.
Cependant comme il faut que je compile l’ensemble 3 codes sources du projet H323
( PWLIB - OpenH323 - OpenMCU ) , je bute actuellement sur la compilation du code suivant !

Il faut en fait faire 2 compilations :

  1. OpenH323Lib > tout ce passe bien
  2. OpenH323dll > et c’est là que ça bug

------ Début de la génération : Projet : OpenH323dll, Configuration : Release Win32 ------
Merging exported library symbols
‘MergeSym’ n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Compilation en cours…
dllmain.cxx
Compilation des ressources en cours…
Édition des liens en cours…
LINK : fatal error LNK1181: impossible d’ouvrir le fichier en entrée ‘ptclib.lib’
Projet : warning PRJ0018 : Les variables d’environnement suivantes sont introuvables :
$(INCLUDE)
Le journal de génération a été enregistré à l’emplacement “file://c:\openh323\lib\Release\BuildLog.htm”
OpenH323dll - 1 erreur(s), 0 avertissement(s)
========== Génération : 2 a réussi, 2 a échoué, 0 mis à jour, 0 a été ignoré ==========

J’ai comme l’impression que c’est le [/I]ptclib.lib n’est pas dans le INCLUDE qu’il ne retrouve pas alors que je l’ai bien inclue dans dans VC++

Comme tu peux le voir, OpenH323 à besoin de la lib que tu as compilé, à savoir le fichier "ptclib.lib" généré par PWlib, lib que tu dois ajouter dans les options du linker du projet OpenH323 ou directement dans le projet en tant que fichier.

Bonjour,

J’ai vu qu’il faut le fichier ptclib.lib pour compiler OpenH323. Le problème est qu’il n’existait pas. En fait il faut compiler un autre programme (un prog qui fait partie de PWLIB) pour le generer. Ce que j’ai essayé de faire … Essayer car le prog ne s’est pas bien compilé :grrr:

------ Début de la génération : Projet : MergeSym, Configuration : Release Win32 ------
Compilation en cours…
MergeSym.cxx
.\MergeSym.cxx(197) : error C2065: ‘inc_index’ : identificateur non déclaré
.\MergeSym.cxx(280) : error C2440: ‘initialisation’ : impossible de convertir de ‘const char *’ en ‘char *’
La conversion perd les qualificateurs
.\MergeSym.cxx(298) : error C2440: ‘initialisation’ : impossible de convertir de ‘const char *’ en ‘char *’
La conversion perd les qualificateurs
Le journal de génération a été enregistré à l’emplacement “file://c:\pwlib\tools\MergeSym\Release\BuildLog.htm”
MergeSym - 3 erreur(s), 0 avertissement(s)
========== Génération : 1 a réussi, 1 a échoué, 1 mis à jour, 0 a été ignoré ==========

J’ai comme l’impression que Visual C++ 2005 n’arrive pas à tout mouliner pour me sortir une bonne compilation.

Le problème, je pense, vient de la conversion des versions antérieures antérieures de Visual C++ avec celle que j’utilise. Quand j’ouvre le projet pour la première fois, Visual C++ me demande de fiare une conversion. C’est peut etre là qu’il y a le problème !

Merci de me répondre

C’est une erreur normale que tout bon compilo émet, il faudra que tu mettes les mains dans le cambouie en modifiant chaque erreur de ce type.
Exemple : si le code c’est :


char * bar()
{
  ...
}

const char * foo;

   foo = bar();

Il faudra caster comme ceci :


char * bar()
{
  ...
}

const char * foo;

   foo = (const char*)bar();

Si tu n’as jamais programmé de ta vie, oublie la compilation de la lib et prend directement la DLL.

Ok, je crois que je vais utiliser les LIB pour voir ce que ça donne. Mais j’aimerais juste savoir par rapport à l’utilisation de ces lib en remplacement des codes sources que je cherchais à compiler ? Est-ce qu’il faut juste mettre toutes les lib dans un seul et meme dans les dossiers des codes sources respective? ou faut-il faire autre choses?

Je programmes pas souvent mais je vais parallelement essayer de corriger ces programmes de conversions.

Merci de me répondre.

Attention aux termes, une LIB et une DLL ne sont pas les mêmes choses, on parle de bibliothèque : le .LIB est une bibliothèque statique et la DLL une bibliothèque dynamique.
Pour répondre à ta question, pour utiliser la DLL, tu devrais avoir de fournis un .lib dans l’archive de la DLL, il correspond aux fonctions importées, tu devras ajouter ce .lib qui est généralement un fichier de petite taille dans les options de ton linker ou directement dans les sources de ta solution (plus crade mais fonctionne à coup sûr).
Ensuite, tu devras copier la DLL soit à la racine de ton programme ou dans un répertoire figurant dans les variables d’environnement, en général, dans windows\system32.

J’ai regardé dans le code qui “merdouille” et je pense que les erreurs proviennent en partie de 2 lignes de codes qui sont indentiques :

char * namepos = strchr(line, ‘|’);

Toutefois, je comprend pas pourquoi il ya des erreurs puisque le prototype de la fonction strchr est :
char* strchr(const char* chaine, int caractereARechercher);

Ce qui prouve que ça renvoie bien un pointeur de type char . donc le problème ne peut venir de là ou bien c’est mon compilateur Visual C++ qui a un problème ! Par contre j’ai un doute sur le parametre “line”. Il est declaré comme ceci : PCaselessString line ; C’est donc un type personnalisé !(enfin je crois!)
Et si c’est le cas, il faudra peut etre convertir line au bon type pour strchr.
Et c’est là que mes compétences s’arretent ! Pour trouver PCaselessString , il faudra fouiller dans tout le projet !!! Mais avant j’aimerais explorer davantage les DLL.

J’ai téléchargé les DLL pour PWLIB ici
Après decompression je trouve pwlib_20030313_win32\lib . lib est un dossier qui contient 2 DLLs PTLib.dll et PWLib.dll .Mais pas de .lib
D’apres les descriptions ce sont ces 2 DLLs que je dois rajouter à mon dossier PWLIB.
Je vais de ce pas le faire !

J’ai regardé rapidement l’archive de la DLL, franchement, autant les auteurs sont des gurus en programmation autant en gestion de projet ce sont juste des branquignoles : toutes les fonctions exportés sont masquée, aucun header inclus (pour l’API) et pas de .lib pour l’import des fonctions … c’est le minimum syndical, même moi qui ne suit qu’un amateur je fournis toujours cela.
'Fin bref, oublie les DLL.
Pour l’erreur, deux possibilités :

  • soit PCaselessString est templatisé et donc un “char * namepos = strchr((const char*)line, ‘|’);” devrait faire l’affaire,
  • soit ce n’est pas le cas, et il faudra faire un truc du style “char * namepos = strchr(line.get_ptr(), ‘|’);” get_ptr() n’est qu’un exemple ici, il te faudra trouver une fonction membre qui renvoye soit les datas soit la chaine ANSI. (“c_str()”);

Salut,

J’ai essayé ta premiere solution mais toujours rien ! Quant à la 2ème , je n’ai pas trouvé de fonction qui consulterait la valeur de lne ( c’est bien de ça qu’il sagissait).

Je crois qu’il va valoir que j’essais un autre IDE ( Code::Block par ex.) pour voir si l’erreur persiste.Pour ça il faut valoir que je le decouvre d’abord ( oû mettre les includes,lib…) auparavant.
Je ferais parallèlement des tests d’installation sous Linux.Car là je commence à desespérer là :’(

PS: Je viens de voir que line est de type PString . La déclaration dans le code est : PString line;
Dans ce cas je ne sais pas si c’est converstisable en char * en faisant seulement un cast ??? C’est pas un objet ça?

Il ne faut pas voire la déclaration mais l’implémentation de la classe, PCaselessString hérite peut être d’une classe PString, il faudra que tu regardes les fonctions/membres accessibles pour récupérer soit les données ou la chaîne ou comme je l’ai dit, voire s’il y a utilisation de template et dans ce cas, tu pourras caster directement l’instance de classe.
Changer d’IDE ne résoudra pas le problème, surtout si tu continues d’utiliser le compilateur de VStudio dans code::blocks.
Il te faudra donc soit changer de compilateur (gcc) soit modifier le code source en conséquence.

salut
char * namepos = strchr(line, ‘|’);
char* strchr(const char* chaine, int caractereARechercher);

dans le prototype de la fct strchr le 2eme membre est “int” mais ‘|’ je croit
que c n’est un int il est char !
:??: