Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
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 06/06/2011, 17h29   #1
 
Homme
Architecte réseau
Inscription : juin 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 14
Points : -2
Points : -2
Par défaut cross platform windows/linux

Bonjour a tous amis développeurs.

Je me présente je suis stagiaire dans une boite de sécurité informatique ou nous développons actuellement une solution de transmission sécurisée de données bref pas besoin d'en dire plus sinon le boss va hurler :p.

Pour rentrer plus dans le vif du sujet, disons que le code source est déjà développé et adapté a windows.

C'est là ou j'interviens, en effet, j'ai besoin actuellement d'adapter une bibliothèque windows à linux pour en faire plus tard une bibliothèque dynamique partagée.

J'aurais donc besoin de vos connaissances en la matière (je ne suis vraiment pas habitué au développement sous linux) et précisément en ce qui concerne l'adaptation de certaines structures windows à linux (ex : LoadLibrary() sous windows équivaut à dlopen() sous linux ...etc)

Ainsi vous l'aurez compris j'ai un tas d'instructions windows du genre à traduire sous linux donc s'il existe un tuto ou un site faisant référence aux traductions de ces instructions ou un professionnel parmi vous je suis preneur !!

N'hésitez pas à me poser des questions si je n'ai pas été assez clair.

Merci et bonne journée à tous
yachiro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/06/2011, 18h02   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par yachiro Voir le message
Bonjour a tous amis développeurs.
[...]
Pour rentrer plus dans le vif du sujet, disons que le code source est déjà développé et adapté a windows.
[...]
J'aurais donc besoin de vos connaissances en la matière (je ne suis vraiment pas habitué au développement sous linux) et précisément en ce qui concerne l'adaptation de certaines structures windows à linux (ex : LoadLibrary() sous windows équivaut à dlopen() sous linux ...etc)

N'hésitez pas à me poser des questions si je n'ai pas été assez clair.

Merci et bonne journée à tous
Je répondrais par
Citation:
Par définition un "BON" code source est portable nativement.

donc 1. revoir le code

dans quelques rares fonctions qui interrogent directement le système, et encore uniquement si c'est le cas de façon très profonde, donc pas simplement les appels aux librairies systèmes, là le code doit être adapté.
autrement dit la solution est de contourner le problème en prévoyant dès le code cette possibilité.

mais plus précisément et plus concrètement la meilleure solution est d'écrire un source capable de s'adapter lors de la compilation à son système cible.
Je n'ai jamais testé personnellement, les développeurs en diront plus sur le sujet, mais le principe c'est par exemple
Code :
1
2
3
4
5
toto.c            = corp de programme
lib_perso_linux.h = include linux
lib_perso_win.h   = include windows
lib_perso_both    = include portable
Makefile
et on lance le makefile avec un paramètre qui défini la cible...et on obtient les binaires pour windows ou pour linux

donc puisque tu as déjà tous le nécéssaire pour windows, il te manquera effectivement une ou plusieurs libs pour linux et un makefile permettant le portage.

voilà pour le principe et ça peut s'appliquer à tous langage compilé .

je ne saurai entrer d'avantage dans le détail... je laisse donc le soin aux plus pros en dev de compléter ça...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 11h05   #3
 
Homme
Architecte réseau
Inscription : juin 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 14
Points : -2
Points : -2
Bonjour,

Merci d'avoir répondu aussi vite.

L'ennui est que je ne suis pas l'auteur du dit code source sous windows donc pour ce qui est de la remarque sur l'efficacité d'un code quand il dépend le moins possible de l'OS utilisé bah je la ferai au boss .

Cependant, comme vous l'aurez compris je ne peux ou du moins je ne suis pas autorisé à modifier ce code là, uniquement à adapter le fichier .c correspondant à la bibliothèque du programme windows afin qu'elle puisse correspondre à linux (pour en faire une .so après mais ca c'est pas ce qu'il y a de plus difficile!).

Ce qui me bloque vraiment et pourtant j'ai fais beaucoup de recherche à ce sujet sans jamais trouvé une vraie réponse (c'est peut etre qu'il n'y en a pas et dans ce cas je suis un peu mal barré :o) c'est comment changer cette bibliothèque (du moins quelles instructions changer et quels sont leurs équivalents linux) sans avoir pour autant à la réécrire dans son intégralité..

Merci.
yachiro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 15h12   #4
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 464
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 464
Points : 9 585
Points : 9 585
Citation:
Envoyé par yachiro Voir le message
Cependant, je ne suis pas autorisé à modifier ce code là, uniquement à adapter le fichier .c correspondant à la bibliothèque du programme windows afin qu'elle puisse correspondre à linux.

Ce qui me bloque vraiment, c'est comment changer cette bibliothèque (du moins quelles instructions changer et quels sont leurs équivalents linux) sans avoir pour autant à la réécrire dans son intégralité..
Je resume : tu as un fichier C avec un ou plusieurs fichiers d'en-tete (.h), qui sont du code specifique pour Windows, et tu cherches comment porter cette librairie a moindre frais sous Linux.

Etape 1 : identifier ce qui va poser probleme.
Reponse simple : tous les appels de fonction aux librairies windows. Donc si on suppose que tu connais le C, ca te permet d'etablir une liste des fonctions dont tu devras trouver l'equivalent.

Etape 2 : trouver les equivalents.
Rien d'automatique ici : tu vas devoir prendre les docs MSDN, comprendre ce que font les fonctions, et ensuite chercher l'equivalent Linux. Par exemple pour LoadLibrary, comment as-tu trouve dlopen ?

Etape 3 : les fonctions qui n'ont pas d'equivalent
Il va t'en manquer quelques unes, probablement parce qu'elles n'ont pas d'equivalents. Dans ce cas, la seule solution qu'il te reste est de re-ecrire la fonction a la main, ou de changer le code Linux pour qu'il fasse ce que tu souhaites.

Compilation, edition de lien, et hop, ca roule. Ou presque

Pourquoi ou presque : tu fais quoi de ton code : est-ce que tu fais deux fichiers source distincts, ou bien un seul plus complexe ?
Si tu en fais deux, alors tu auras le probleme de la maintenance et de l'evolution : ton programme sera fige dans sa version actuelle, a moins de gros efforts pour porter les modifications sur l'autre fichier - et il en est de meme pour les bugs.

Si tu as un seul fichier, avec par exemple des sections #ifdef WIN32, alors tu vas te rendre compte que cela n'est possible que si le code est tres tres semblable - par exemple un appel de fonction qui differe de temps en temps. Si c'est tout ton code qui differe, oublie cette solution.

La vraie solution propre, c'est de faire du code portable pour toutes les cibles visees. Cela suppose de ne pas s'appuyer sur les fonctionalites proposes par l'un ou l'autre des OS, et donc de redevelopper la partie Windows.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/06/2011, 16h44   #5
 
Homme
Architecte réseau
Inscription : juin 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 14
Points : -2
Points : -2
Ouep merci beaucoup je m'y suis déjà mit je bouffe de la doc msdn concernant la gestion des threads et j'essaie de trouver les équivalents linux.

Merci à tous pour votre aide je pense revenir très bientôt si jamais j'ai besoin de vous pour l'édition des liens
yachiro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 10h33   #6
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 464
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 464
Points : 9 585
Points : 9 585
Citation:
Envoyé par yachiro Voir le message
Ouep merci beaucoup je m'y suis déjà mit je bouffe de la doc msdn concernant la gestion des threads et j'essaie de trouver les équivalents linux.
Tant que tu n'as pas regle la question de comment architecturer le code, ca ne sert pas a grand chose de connaitre les equivalents des fonctions.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 15h01   #7
 
Homme
Architecte réseau
Inscription : juin 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 14
Points : -2
Points : -2
J'y suis presque je voulais savoir s'il existe une instruction autre que __dllexport propre à windows qui indique que je souhaite exporter telle ou telle fonction

Merci
yachiro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/06/2011, 15h16   #8
Membre Expert
 
Avatar de fregolo52
 
Homme
Développeur C
Inscription : août 2004
Messages : 1 457
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur C

Informations forums :
Inscription : août 2004
Messages : 1 457
Points : 2 064
Points : 2 064
Citation:
Envoyé par yachiro Voir le message
J'y suis presque je voulais savoir s'il existe une instruction autre que __dllexport propre à windows qui indique que je souhaite exporter telle ou telle fonction
Je ne crois pas.

J'ai déjà fait ce genre de travail !! C'est "marrant", ça m'a appris à découvrir Linux : threads avec la synchro (mutex, semaphore), le réseau ...

Vive les #ifdef WIN32 !!!
fregolo52 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 15h20   #9
 
Homme
Architecte réseau
Inscription : juin 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 14
Points : -2
Points : -2
Exactement !! sauf que bon je ne trouve pas ca aussi marrant que toi
yachiro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/06/2011, 15h32   #10
Membre Expert
 
Avatar de fregolo52
 
Homme
Développeur C
Inscription : août 2004
Messages : 1 457
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur C

Informations forums :
Inscription : août 2004
Messages : 1 457
Points : 2 064
Points : 2 064
Citation:
Envoyé par yachiro Voir le message
Exactement !! sauf que bon je ne trouve pas ca aussi marrant que toi
Oui, d'où les guillemets !!
Et je n'étais pas débutant, ça facilite aussi.

Bon courage.

Si tu galères plus tard, poste dans le forum C.
fregolo52 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web