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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 52
    Points : 49
    Points
    49

    Par défaut Compatibilité sous Windows de fichiers créés sous Linux

    Bonjour à tous.

    J'ai Lazarus sous XUbuntu et sous Windows 10 (en dual boot sur mon portable Acer). J'ai refait récemment en 64 bits les 2 installations de Lazarus.

    En fait, je travaille essentiellement sur XUbuntu, mais j'ai recopié plusieurs programmes sur Windows afin de les mettre à disposition de personnes n'utilisant que Windows. Tout a fonctionné jusqu'à présent très bien.
    J'ai cependant constaté très récemment le problème suivant:

    Les programmes que j'ai écrits (sous XUbuntu) ont créé un certain nombre de fichiers. Or, ces fichiers recopiés sur Windows sont maintenant incompatibles avec les programmes Lazarus que j'ai recopiés (et qui fonctionnent normalement sous Windows, sauf en ce qui concerne la gestion des fichiers ci-dessus).

    J'ai constaté par exemple qu'une même création de fichiers produisait sous Windows un fichier de format moitié de celui créé sous XUbuntu (!!!). Ce dernier fichier est accepté par le programme sous Windows mais pas par le programme sous XUbuntu.

    Cependant j'ai bien choisi Lazarus 64 dan les 2 cas ...

    Merci de vos avis

  2. #2
    Membre émérite
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 102
    Points : 2 892
    Points
    2 892
    Billets dans le blog
    2

    Par défaut

    Bonjour,

    J'ai rien compris mis à part un problème de fichier entre OS

    Peux tu être plus clair, plus simple ? Ton application fait quoi ? Tes fichiers ils servent à quoi ? qu'enregistres tu dedans ? Comment tu procèdes ? , Quels sont les fichiers que tu copies de Linux à Windows ? Les versions de Lazarus et FPC sont elles les même dans les 2 OS ?....

    Sans plus d'explications et un exemple de code, dur de te donner un avis.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 311
    Points : 9 559
    Points
    9 559
    Billets dans le blog
    6

    Par défaut

    Une différence de taille du type Char ? AnsiChar et UTF8 dans un cas alors que WideChar dans l'autre ?
    Delphi 5 Pro - Delphi 10.2 Tokyo Community Edition - CodeTyphon 6.50 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 52
    Points : 49
    Points
    49

    Par défaut Lazarus, Lnux-Ubuntu et Windows10

    Bonjour,

    Je reprends (je suis, peut-être lourd, mais bon ...) à nouveau en précisant:

    Il s'agit de calculs sur des matrices (réelles). Une matrice est un array of array of extended. Il est aisé de sauvegarder une matrice dans un fichier à l'aide d'un file of extended (les tailles lignes et colonnes étant passées dans les 2 premiers items pour pouvoir reconstituer la matrice après chargement du fichier).

    J'ai donc utilisé cela dans des programmes que j'ai écrits sous Ubuntu et j'ai été amené à créer de nombreux fichiers de matrices.

    Ultérieurement, j'ai recopié plusieurs de ces programmes sur Windows10 (suivant le célèbre "écrire une fois, compiler partout") et ces programmes fonctionnent effectivement sur les 2 systèmes d'exploitation.

    Mais là où ça s'est compliqué, c'est quand j'ai voulu utiliser sous W10 avec la version Win de Lazarus les fichiers préalablement crées sous Ubuntu. C'est le plantage assuré !

    Par exemple une simple matrice 2x2 crée sous Ubuntu me donne un fichier de 320 octets et la même matrice créée sous W10 par le même programme me donne un fichier de 160 octets ! Bien sûr, il y a incompatibilité ...

    Merci de vos avis. Pour ce qui est des versions de FPC et Lazarus, il s'agit des versions 64 bits reinstallées très récemment depuis Sourceforge.

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 311
    Points : 9 559
    Points
    9 559
    Billets dans le blog
    6

    Par défaut

    Il est aisé de sauvegarder une matrice dans un fichier à l'aide d'un file of extended (les tailles lignes et colonnes étant passées dans les 2 premiers items pour pouvoir reconstituer la matrice après chargement du fichier).

    une simple matrice 2x2 crée sous Ubuntu me donne un fichier de 320 octets et la même matrice créée sous W10 par le même programme me donne un fichier de 160 octets !
    Le type Extended est codé sur 10 octets ; une matrice 2x2 avec les dimensions stockées dans les 2 premières valeurs devrait tenir dans 60 octets, quelque soit l'OS... Car je ne pense pas qu'il y ait d'alignement dans un file of.
    Il faudrait pê un peu de code pour comprendre ! Ou les fichiers produits et les valeurs correspondantes, pour du reverse engineering.
    Delphi 5 Pro - Delphi 10.2 Tokyo Community Edition - CodeTyphon 6.50 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 52
    Points : 49
    Points
    49

    Par défaut

    Tourlourou,

    J'ai revérifié: Les matrices que je manipule sont des matrices complexes (les coefficients sont des couples de réels, ce qui double le nombre de ces coefficients). Par ailleurs les indices partent de 0 et non de 1. Ceci explique que les fichiers soient, tout de même, un peu plus volumineux. Mais les codes sur Linux et Windows sont, tout de même, identiques ...

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 311
    Points : 9 559
    Points
    9 559
    Billets dans le blog
    6

    Par défaut

    Par ailleurs les indices partent de 0 et non de 1
    Une matrice 2x2 serait donc une matrice 3x3 ?

    Soit ! Mais alors, 3x3=9 complexes = 18 réels + 2 pour la taille, soit 200 octets : ni 160, ni 320 !

    Nous manquons d'informations pour vous aider... affirmer simplement que les codes Linux et Windows sont identiques ne suffit pas à nous mettre sur la piste.
    Vérifiez SizeOf(Extended) dans les 2 environnements.
    Dites-nous également si en fait vous ne stockez pas des record dont vous auriez alors intérêt à vérifier la taille, au cas où un alignement différent des données sur les deux plateformes expliquerait le décalage.
    Delphi 5 Pro - Delphi 10.2 Tokyo Community Edition - CodeTyphon 6.50 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 311
    Points : 9 559
    Points
    9 559
    Billets dans le blog
    6

    Par défaut

    Après vérification, la taille d'un Extended est de 10 octets sous CT64/Ubuntu mais 8 octets seulement sous CT64/Win10 (Delphi semble le faire d'après Qwant : ils ont copié bêtement !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TComplex = record
        reel, imag: Extended;
      end;
    Ce record a une taille de 16 sous CT64/Win10 mais 32 sous CT64/Ubuntu, pour raison d'alignement.

    Ceci expliquerait la différence si le problème avait été exposé de façon moins partielle et correspondait bien à ce qui en a été imaginé !

    Solution, adopter le Double, qui doit occuper 8 octets dans les 2 environnements...
    Delphi 5 Pro - Delphi 10.2 Tokyo Community Edition - CodeTyphon 6.50 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #9
    Membre émérite
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 102
    Points : 2 892
    Points
    2 892
    Billets dans le blog
    2

    Par défaut

    Salut

    "File of...." est désuet, le mieux serait d'utiliser des flux (TFileStream). Une autre petite chose, il faut faire attention avec les VM Je confirme la taille de Extended sous Win10 64bits est de 8 octets Cette différence est normale. Elle en fonction de l'architecture du processeur

    https://wiki.freepascal.org/Extended/fr / https://wiki.freepascal.org/Data_type
    Extended est un type de donnée numérique réel en virgule flottante de grande amplitude mais sa représentation en mémoire dépend du processeur de la cible.

    Free Pascal uses the math coprocessor (or emulation) for all its floating-point calculations. The Real native type is processor dependent, but it is either Single or Double. Only the IEEE floating point types are supported, and these depend on the target processor and emulation options

    For Intel 80x86 processors, the extended type has takes up 10 bytes of memory space. For more information on the extended type consult the Intel Programmer’s reference.
    For all other processors which support floating point operations, the extended type is a nickname for the type which supports the most precision, this is usually the double type. On processors which do not support co-processor operations (and which have the {$E+} switch), the extended type usually maps to the single type.
    Donc voila le pourquoi du comment. Utilises des Double comme le suggère tourlourou et ton problème devrait être résolu

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 52
    Points : 49
    Points
    49

    Par défaut

    Tourlourou et BeanzMaster

    Grand merci pour votre aide.

    Effectivement, j'ai vérifié qu'en utilisant des double (le transtypage extended vers double fonctionne sans problème dans Lazarus Ubuntu) mes fichiers sont utilisables sous Windows comme sous Ubuntu.

    Bien cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/11/2012, 13h31
  2. fichiers css appelés sous windows et plus sous linux
    Par kaking dans le forum Zend Framework
    Réponses: 14
    Dernier message: 19/09/2011, 15h56
  3. Mon fichier gtkrc fonctionne sous windows mais pas sous Linux !
    Par Kicker dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 24/04/2009, 12h54
  4. Nombre de fichier maximum par répertoire sous Linux et Windows
    Par juju034 dans le forum Administration système
    Réponses: 4
    Dernier message: 30/06/2008, 16h22
  5. Les fichiers sous linux/windows
    Par Stessy dans le forum Linux
    Réponses: 5
    Dernier message: 05/12/2003, 09h30

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