MSX Village forum

La Place des Développeurs MSXgl MSX Game Library

aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 24/04/2022 à 18h00

Reprise du message précédent

Salut,
Voici une nouvelle version de ma bibliothèque C : MSXgl v0.3.4-alpha

Change log :
○ [Arkos] Ajout des replayers Arkos Tracker entièrement fonctionnels (merci à Targhan) :
  - AKG (générique) : Le lecteur classique. Bon équilibre entre vitesse et place.
  - AKY (rapide) : Le lecteur le plus rapide (mais la musique est aussi plus grosse).
  - AKM (minimaliste) : Le plus petit lecteur (mais plus lent).
  - Ajout d'un programme d'exemple pour montrer l'utilisation des replayers Arkos (s_arkos).
○ [BIOS] Ajout de fonctions pour la lecture du clavier (utilisant des variables système).
○ [Input] Ajout d'une mise à jour optionnelle des rangées complètes du clavier et de fonctions de lecture rapide (pour un environnement sans BIOS).
○ [Sample] Divers nettoyages et corrections sur les programmes d'exemple.
○ [BuildTool] :
  - Correction du script de compilation (correction des options des segments de mappeur et ajout du support pour le fichier source assembleur en .s).
  - Ajout du répertoire des header SDCC au chemin d'inclusion.
○ [Doc] Mise à jour de la documentation du code (voir /engine/doc/html/index.html)


Arkos sample


Wizzl - WIP game

Si vous avez des questions ou besoin d'aide sur MSXgl, je suis disponible ici ou sur Discord. :tchin


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 24/04/2022 à 19h14
Less bug, more fun :)

Et tes outils ? Tu les finalisent bientôt pour GCC ?
J'ai pas regardé si tu as publié ceux que tu as déjà convertis... ?


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 24/04/2022 à 23h05
J'ai été trop ambitieux avec mes outils car j'ai voulu faire le passage à GCC en même temps que je centralisais les traitements communs entre mes outils.
Du coup, je vais d'abord clean mes outils via Visual Studio (avec lequel j'ai mes habitudes) et ensuite je finirai le passage à GCC.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 29/04/2022 à 19h40
Il me semble que t'avais converti ton Bin To Hex, tu veux pas le mettre à dispo... J'ai besoin d'une meilleur outils que celui de base...
Je te fais une bise d'avance :kiss


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 29/04/2022 à 20h50
Celui que j'ai converti, c'est mon MSXbin qui converti des fichiers binaires en .h ou .asm.

L'équivalent de hex2bin qui fonctionne bien avec les MegaROM, c'est l'outil dont je te parlais sur l'autre topic.
Il s'appel MSXhex et je viens de le commencer.
Ca devrait être rapide à finir.
Je te tiens au courant.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 29/04/2022 à 21h47
oui c'est ça... Bin to Hex ou MsxBin... c'est toi qui voit pour le nom ;)


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 30/04/2022 à 00h29
Et voilà, j'ai déjà qq programmes qui compilent avec GCC (https://github.com/aoineko-fr/MSXgl/tree/main/tools/MSXtk) :
- MSXbin : Converti un fichier binaire en fichier source C ou assembleur.
- MSXzip : Compresseur (RLEp uniquement actuellement ; sera combiné avec MSXbin à termes).
- MSXhex : Converti un fichier ihx (créé par le Linker de SDCC) en fichier binaire. Supporte les ROM mappées via le format des banks de SDCC. C'est une version customisée de hex2bin spécialement conçu pour SDCC et le MSX.

Pour la compilation via GCC, regarde build.bat.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 30/04/2022 à 08h37
Merci ! ;)

Citation :
MSXhex : Converti un fichier ihx (créé par le Linker de SDCC) en fichier binaire. Supporte les ROM mappées via le format des banks de SDCC. C'est une version customisée de hex2bin spécialement conçu pour SDCC et le MSX


Comprend pas à quoi ça sert :heink :hum Edité par ericb59 Le 30/04/2022 à 08h38


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 30/04/2022 à 12h13
Programme d'exemple:
Code C :
 
main.c
----------------------------------------
external uint16 extVar; // Variable externe
uint16 extFunc(); // Prototype de fonction externe
uint16 intVar = 0; // Variable interne
uint16 intFunc() { return ++intVar; } // Fonction interne
void main()
{
    uint16 result = intFunc() + extFunc();
}
 


Les étapes pour créer un fichier binaire final (que tu utilises aussi forcement) :

La compilation, qui va générer du code machine "relatif" pour un fichier source donné. A ce moment-là, on ne sait pas encore où le code va être placé au final et on ne connait pas la valeur des symboles externes (l'adresse des variables/fonctions qui sont dans un autre fichier source). Dans l'exemple la valeur des symboles _extVar et _extFunc est inconnue (ils devront être "résolu" plus tard) et _intVar et _intFunc ont des valeurs relatives au fichier. _intVar aura (probablement) une valeur relative de 0000h par rapport à l'adresse RAM locale (dans le segment _DATA) et _intFunc de 0000h par rapport à l'adresse de code locale (segment _CODE).

La linkage, qui va assembler les codes machines de toutes les sources et résoudre la valeur des symboles. Les variables en RAM vont être accumulés dans le segment _DATA (les unes derrières les autres en fonction de leur taille) et idem pour le contenu des fonctions dans le segment _CODE. Si le fichier d'exemple était linké en premier (en vrai, c'est généralement le crt0) et qu'on a définie les adresses de début de segment avec --codeseg 0x4100 --dataseg 0xC000 alors _intVar vaudrait 0xC000 et la variable suivante 0xC002 (vu que _intVar fait 2 bytes).
Avec SDCC, cette étape génère un fichier IHX (Intel HEX) qui contient tout le contenu binaire du programme au format texte (ASCII).

La binarisation, qui va convertir le fichier IHX en fichier binaire final. Jusqu'à présent j'utilisais hex2bin (de Jacques Pelletier) pour se faire. Pour une ROM qui commence en 4000h, tu lui donnes cette adresse et il va généré le fichier binaire que tu peux installer sur une FlashROM ou mettre dans un émulateur.

Récemment, j'ai compris comment gérer les segments de mapper de ROM au niveau du linkage pour que tout soit assemblé d'un coup et que les symboles des segments soient accessibles de n'importe où. Par ex., si tu as un tableau uint8 myTable[] = { 1, 2, 3, 4 }; dans ton 10e segment d'une ROM ASCII-8, et tu vas pouvoir accéder au symbole myTable depuis n'importe quel autre segment. Ce n'évite pas que le programmeur doive gérer manuellement quel segment se trouve dans quel bank du mapper, mais ça évite de devoir connaitre les adresses à l'avance.

Le soucis, c'est que la façon dont SDCC support l'accès aux symboles des segments n'est pas compatible avec hex2bin.
C'est pourquoi j'ai créé MSXhex qui fait un peu la même chose que hex2bin mais qui reconnais le codage des segments de SDCC et qui réarrange le fichier binaire final en fonction.

Voilà, j'espère que c'est plus clair... au moins un peu. ^^


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 30/04/2022 à 13h16
Ha oui j'avais oublié cette étape. OK j'ai compris. Reste à voir dans la pratique comment on fait. Je reviendrais vers toi là dessus plus tard.
En attendant, toujours des problèmes de compilation :

Obligé d'utiliser -std=c++11 sinon encore plus d'erreurs de compilation.
Code TEXT :
 
g++ -o MSXbin -Isrc -Wall -std=c++11 MSXbin.cpp
 


Code TEXT :
 
In file included from MSXbin.cpp:23:
In file included from ./MSXtk.h:14:
./MSXtk_string.h:67:11: error: use of undeclared identifier '_stricmp'; did you mean 'strcmp'?
                return (_stricmp(str1, str2) == 0);
                        ^~~~~~~~
                        strcmp
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/string.h:77:6: note: 'strcmp' declared here
int      strcmp(const char *__s1, const char *__s2);
         ^
In file included from MSXbin.cpp:23:
In file included from ./MSXtk.h:16:
./MSXtk_export.h:197:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
./MSXtk_export.h:233:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
In file included from MSXbin.cpp:23:
In file included from ./MSXtk.h:17:
./MSXtk_file.h:35:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file.Interface, file.Filename.c_str(), "rb") != 0)
                    ^
./MSXtk_file.h:44:7: error: use of undeclared identifier 'fread_s'
                if (fread_s(file.Data.data(), file.Size, sizeof(u8), file.Size, file.Interface) != file.Size)
                    ^
MSXbin.cpp:314:6: error: use of undeclared identifier 'fopen_s'
        if (fopen_s(&file, g_InputFile.c_str(), "rb") != 0)
            ^
MSXbin.cpp:323:6: error: use of undeclared identifier 'fread_s'
        if (fread_s(binData, fileSize, sizeof(u8), fileSize, file) != fileSize)
            ^
MSXbin.cpp:441:7: error: use of undeclared identifier 'sprintf_s'
                                                sprintf_s(strBuf, BUFFER_SIZE, (g_Address == ADDR_HEXA) ? "%08X | %s" : "%6d | %s", offset, strLine);
                                                ^
MSXbin.cpp:443:7: error: use of undeclared identifier 'sprintf_s'
                                                sprintf_s(strBuf, BUFFER_SIZE, (g_Address == ADDR_HEXA) ? "%08X" : "%6d", offset);
                                                ^
MSXbin.cpp:461:6: error: use of undeclared identifier 'fopen_s'
        if (fopen_s(&file, g_OutputFile.c_str(), "wb") != 0)
            ^
MSXbin.cpp:562:4: error: use of undeclared identifier 'sscanf_s'; did you mean 'sscanf_l'?
                        sscanf_s(argv[i], "%i", &g_StartAddr);
                        ^~~~~~~~
                        sscanf_l
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/xlocale/_stdio.h:42:6: note: 'sscanf_l' declared here
int      sscanf_l(const char * __restrict, locale_t __restrict, const char * __restrict, ...) 
         ^
MSXbin.cpp:562:22: error: cannot initialize a parameter of type 'locale_t' (aka '_xlocale *') with an lvalue of type 'const char [3]'
                        sscanf_s(argv[i], "%i", &g_StartAddr);
                                          ^~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/xlocale/_stdio.h:42:59: note: passing argument to parameter here
int      sscanf_l(const char * __restrict, locale_t __restrict, const char * __restrict, ...) 
                                                              ^
12 errors generated.
 








Pour info je tr mets les erreurs si je ne mets pas en c++11

Code TEXT :
 
In file included from MSXbin.cpp:23:
In file included from ./src/msxtk.h:14:
src/MSXtk_string.h:32:8: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        const auto r = std::vsnprintf(buf, sizeof buf, fmt, args);
              ^
src/MSXtk_string.h:37:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
                return {};
                       ^~
src/MSXtk_string.h:37:10: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
                return {};
                       ^~
src/MSXtk_string.h:42:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
                return { buf, len };
                       ^~~~~~~~~~~~
src/MSXtk_string.h:42:10: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
                return { buf, len };
                       ^~~~~~~~~~~~
src/MSXtk_string.h:54:2: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        auto vbuf = std::unique_ptr<char[]>(new char[len + 1]);
        ^
src/MSXtk_string.h:59:9: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
        return { vbuf.get(), len };
               ^~~~~~~~~~~~~~~~~~~
src/MSXtk_string.h:59:9: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
        return { vbuf.get(), len };
               ^~~~~~~~~~~~~~~~~~~
src/MSXtk_string.h:67:11: error: use of undeclared identifier 'stricmp'; did you mean 'strcmp'?
                return (stricmp(str1, str2) == 0);
                        ^~~~~~~
                        strcmp
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/string.h:77:6: note: 'strcmp' declared here
int      strcmp(const char *__s1, const char *__s2);
         ^
In file included from MSXbin.cpp:23:
In file included from ./src/msxtk.h:16:
src/MSXtk_export.h:197:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
src/MSXtk_export.h:233:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
In file included from MSXbin.cpp:23:
In file included from ./src/msxtk.h:17:
src/MSXtk_file.h:22:20: warning: default member initializer for non-static data member is a C++11 extension [-Wc++11-extensions]
        FILE*                   Interface = nullptr;
                                          ^
src/MSXtk_file.h:23:14: warning: default member initializer for non-static data member is a C++11 extension [-Wc++11-extensions]
        u32                             Size = 0;
                                             ^
src/MSXtk_file.h:35:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file.Interface, file.Filename.c_str(), "rb") != 0)
                    ^
src/MSXtk_file.h:44:7: error: use of undeclared identifier 'fread_s'
                if (fread_s(file.Data.data(), file.Size, sizeof(u8), file.Size, file.Interface) != file.Size)
                    ^
MSXbin.cpp:101:8: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        const auto r = std::vsnprintf(buf, sizeof buf, fmt, args);
              ^
MSXbin.cpp:106:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
                return {};
                       ^~
MSXbin.cpp:106:10: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
                return {};
                       ^~
MSXbin.cpp:111:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
                return { buf, len };
                       ^~~~~~~~~~~~
MSXbin.cpp:111:10: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
                return { buf, len };
                       ^~~~~~~~~~~~
MSXbin.cpp:123:2: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        auto vbuf = std::unique_ptr<char[]>(new char[len + 1]);
        ^
MSXbin.cpp:128:9: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]
        return { vbuf.get(), len };
               ^~~~~~~~~~~~~~~~~~~
MSXbin.cpp:128:9: error: non-aggregate type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
        return { vbuf.get(), len };
               ^~~~~~~~~~~~~~~~~~~
MSXbin.cpp:314:6: error: use of undeclared identifier 'fopen_s'
        if (fopen_s(&file, g_InputFile.c_str(), "rb") != 0)
            ^
MSXbin.cpp:323:6: error: use of undeclared identifier 'fread_s'
        if (fread_s(binData, fileSize, sizeof(u8), fileSize, file) != fileSize)
            ^
MSXbin.cpp:333:23: error: unexpected type name 'u8': expected expression
                AddComment(strData, u8"_____________________________________________________________________________");
                                    ^
MSXbin.cpp:334:23: error: unexpected type name 'u8': expected expression
                AddComment(strData, u8"   ▄▄   ▄ ▄  ▄▄▄ ▄▄ ▄ ▄▄   ▄");
                                    ^
MSXbin.cpp:335:23: error: unexpected type name 'u8': expected expression
                AddComment(strData, u8"  ██ ▀ ██▀█ ▀█▄  ▀█▄▀ ██▄  ▄  ██▀▄");
                                    ^
MSXbin.cpp:336:23: error: unexpected type name 'u8': expected expression
                AddComment(strData, u8"  ▀█▄▀ ██ █ ▄▄█▀ ██ █ ██▄▀ ██ ██ █");
                                    ^
MSXbin.cpp:337:23: error: unexpected type name 'u8': expected expression
                AddComment(strData, u8"_____________________________________________________________________________");
                                    ^
MSXbin.cpp:441:7: error: use of undeclared identifier 'sprintf_s'
                                                sprintf_s(strBuf, BUFFER_SIZE, (g_Address == ADDR_HEXA) ? "%08X | %s" : "%6d | %s", offset, strLine);
                                                ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
12 warnings and 20 errors generated.
 
 
 
Edité par ericb59 Le 30/04/2022 à 13h30


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 30/04/2022 à 13h52
Tu utilises quelle version de GCC ?
J'utilise la version 11.2.0.

Il n'est pas impossible que mon code ne soit compatible avec C++11.
J'ai pas encore regardé en détail les évolutions récentes du langage.
Par contre, ça compile sans soucis avec la version du C par défaut (j'ai pas trouvé c'est quelle version).

Edit : Compile en C++17 pour plus avoir d'erreur.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 30/04/2022 à 14h12
J'ai la dernière version, ca prend en charge jusqu'à C++20

Si je compile en C++11

Code TEXT :
 
src/MSXtk_string.h:67:11: error: use of undeclared identifier '_stricmp'; did you mean 'strcmp'?
                return (_stricmp(str1, str2) == 0);
                        ^~~~~~~~
                        strcmp
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/string.h:77:6: note: 'strcmp' declared here
int      strcmp(const char *__s1, const char *__s2);
         ^
In file included from MSXbin.cpp:23:
In file included from ./src/msxtk.h:16:
src/MSXtk_export.h:197:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
src/MSXtk_export.h:233:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file, filename.c_str(), "wb") != 0)
                    ^
In file included from MSXbin.cpp:23:
In file included from ./src/msxtk.h:17:
src/MSXtk_file.h:35:7: error: use of undeclared identifier 'fopen_s'
                if (fopen_s(&file.Interface, file.Filename.c_str(), "rb") != 0)
                    ^
src/MSXtk_file.h:44:7: error: use of undeclared identifier 'fread_s'
                if (fread_s(file.Data.data(), file.Size, sizeof(u8), file.Size, file.Interface) != file.Size)
                    ^
MSXbin.cpp:314:6: error: use of undeclared identifier 'fopen_s'
        if (fopen_s(&file, g_InputFile.c_str(), "rb") != 0)
            ^
MSXbin.cpp:323:6: error: use of undeclared identifier 'fread_s'
        if (fread_s(binData, fileSize, sizeof(u8), fileSize, file) != fileSize)
            ^
MSXbin.cpp:441:7: error: use of undeclared identifier 'sprintf_s'
                                                sprintf_s(strBuf, BUFFER_SIZE, (g_Address == ADDR_HEXA) ? "%08X | %s" : "%6d | %s", offset, strLine);
                                                ^
MSXbin.cpp:443:7: error: use of undeclared identifier 'sprintf_s'
                                                sprintf_s(strBuf, BUFFER_SIZE, (g_Address == ADDR_HEXA) ? "%08X" : "%6d", offset);
                                                ^
MSXbin.cpp:461:6: error: use of undeclared identifier 'fopen_s'
        if (fopen_s(&file, g_OutputFile.c_str(), "wb") != 0)
            ^
MSXbin.cpp:562:4: error: use of undeclared identifier 'sscanf_s'; did you mean 'sscanf_l'?
                        sscanf_s(argv[i], "%i", &g_StartAddr);
                        ^~~~~~~~
                        sscanf_l
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/xlocale/_stdio.h:42:6: note: 'sscanf_l' declared here
int      sscanf_l(const char * __restrict, locale_t __restrict, const char * __restrict, ...) 
         ^
MSXbin.cpp:562:22: error: cannot initialize a parameter of type 'locale_t' (aka '_xlocale *') with an lvalue of type 'const char [3]'
                        sscanf_s(argv[i], "%i", &g_StartAddr);
                                          ^~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/xlocale/_stdio.h:42:59: note: passing argument to parameter here
int      sscanf_l(const char * __restrict, locale_t __restrict, const char * __restrict, ...) 
 
Edité par ericb59 Le 30/04/2022 à 14h13


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 30/04/2022 à 14h22
Sans doute un problèmes avec les fonctions *_s qui semblent spécifiques avec Microsoft.

lu sur stack overflow
Citation :
Many of Microsoft's secure functions are included in Annex K of the C11 standard, but it is not widely supported, so portability is still an issue. There is a need for the improved security in some applications; maybe the support will improve in the future.


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 30/04/2022 à 14h49
Ce qui est étrange c'est que je compile et je link avec la lib GCC... ça voudrait dire que la version Windows de GCC contient ces fonctions, mais pas les autres ? :hum

Faudrait que j'installe une version de Linux pour pouvoir tester.

Édit : C'est pas le sujet ici, mais les versions sécurisées des fonctions de manipulation de chaîne de caractères devrait être dans la norme amha.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5284

Le 30/04/2022 à 16h39
Oui, alors je viens de faire un test sur Win 11 , en installant MingW, et ca compile parfaitement avec -std=c++17

Et je viens de lire plusieurs post concernant les functions *_s, elles sont optionnelles et pas intégrées dans sur Linux et MacOS.

la solution étant d'ajouter un #define pour la contourner
Code TEXT :
 
#ifdef __APPLE__
#define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename),  (mode)))==NULL
#endif
 


Après faut aussi faire la même chose avec fread_s ; fwrite_s ; sprintf_s, sscanf_s ...

Tu connais ces fonctions, sans doute tu peux écrire les defines qui vont bien pour les court circuiter ?


banniere-ericb59e
Site web    
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2077

Le 30/04/2022 à 16h46
Oui, c'est possible. Par contre j'aimerai ne pas faire ça à l'aveugle donc je vais d'abord tâcher de pouvoir tester sur Linux (ou via un émulateur).


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie