Accueil > tags> MinGW

MinGW

Directives

Note à l'intention d'isoler la partie des directives dépendantes de la plateforme préprocesseur lors de l'écriture code multi-plateforme.

  • Compilateur
    • GCC
      • # Ifdef __ GNUC__
        • Ou plus # if __ GNUC__> = 3 / / GCC3.0
    • Borland C + +
      • # Ifdef __ BORLANDC__
    • Intel Compiler
      • # Ifdef __ INTEL_COMPILER
    • Microsoft compilateur
      • # Ifdef _MSC_VER
        • # VC plus tard si _MSC_VER> = 600 / / compilateur C + + 6.0, y compris
        • # VC plus tard si _MSC_VER> = 700 / / C / C + + Compiler 7.0 + +, y compris
        • # Plus tard, si _MSC_VER> = 800 / / VC + 1,0
        • # Plus tard, si _MSC_VER> = 900 / / VC + 2,0
        • # Plus tard, si _MSC_VER> = 1000 / / VC + 4,0
        • # Plus tard, si _MSC_VER> = 1010 / / VC + 4,1
        • # Plus tard, si _MSC_VER> = 1020 / / VC + 4,2
        • # Plus tard, si _MSC_VER> = 1100 / / VC + 5,0
        • # Plus tard, si _MSC_VER> = 1200 / / VC + 6,0
        • # Si _MSC_VER> = 1300 / / VC2002 plus tard (VC7.0)
        • # Si _MSC_VER> = 1310 / / VC2003 plus tard (VC7.1)
        • # Si _MSC_VER> = 1400 / / VC2005 plus tard (VC8.0)
        • # Si _MSC_VER> = 1500 / / VC2008 plus tard (VC9.0)
        • # Si _MSC_VER> = 1600 / / VC2010 plus tard (VC10.0)
  • Système UNIX
    • UNIX
      • # Ifdef __ unix
      • # Ifdef __ unix__
    • Linux
      • # Ifdef __ linux
      • # Ifdef __ linux__
    • FreeBSD
      • # Ifdef __ FreeBSD__
    • NetBSD
      • # Ifdef __ NetBSD__
    • Cygwin
      • # Ifdef __ CYGWIN__
      • # Ifdef __ Cygwin la version CYGWIN32__ / / 32 bits
    • MinGW (-mno-cygwin)
      • # Ifdef __ MINGW32__
  • Système Windows
    • CUI
      • # Ifdef _CONSOLE
    • GUI
      • # Ifdef _WINDOWS
    • Windows 32 bits
      • # Ifdef WIN32
      • # Ifdef _WIN32
    • Windows 64 bits
      • # Ifdef _WIN64
    • Version de Windows
      • # Ifdef WINVER
        • Depuis # if (WINVER> = 0x030a) / / Windows 3.1
        • # Depuis 95 / NT4.0 (WINVER> = 0 × 0400) / / Windows si
        • Depuis # if (WINVER> = 0 × 0410) / / Windows 98
        • Depuis # if (WINVER> = 0 × 0500) / / Windows Me / 2000
        • Depuis # if (WINVER> = 0 × 0501) / / Windows XP / Server 2003
        • # Depuis 2003 SP1 (WINVER> = 0 × 0502) / / Windows XP SP2 / Server si
        • Depuis # if (WINVER> = 0 × 0600) / / Windows Vista / Server 2008
        • Depuis # if (WINVER> = 0 × 0601) / / Windows 7
      • # Ifdef _WIN32_WINDOWS / / Windows 9x
        • # Si plus tard (_WIN32_WINDOWS> = 0 × 0400) / / Windows 95
        • # Si plus tard (_WIN32_WINDOWS> = 0 × 0410) / / Windows 98
        • # Si plus tard (_WIN32_WINDOWS> = 0 × 0500) / / Windows Me
      • # Ifdef _WIN32_WINNT / / WindowsNTx
        • / / Etant donné que Windows 2000 (0 × 0500)
          # Si (_WIN32_WINNT> _WIN32_WINNT_WIN2K =)
        • / / Depuis 2003 Windows XP / Server (0 × 0501)
          # Si (_WIN32_WINNT> = _WIN32_WINNT_WINXP)
        • / / Depuis 2003 SP1 Windows XP SP2 / Server (0 × 0502)
          # Si (_WIN32_WINNT> = _WIN32_WINNT_WS03)
        • / / De Windows Vista (0 × 0600)
          # Si (_WIN32_WINNT> = _WIN32_WINNT_VISTA)
        • / / À partir de Windows Server 2008 (0 × 0600)
          # Si (_WIN32_WINNT> = _WIN32_WINNT_WS08)
        • / / À partir de Windows 7 (0 × 0601)
          # Si (_WIN32_WINNT> = _WIN32_WINNT_WIN7)
      • # Ifdef _WIN32_WCE / / WindowsCE
        • # Si (_WIN32_WCE> = 0 × 0420) / / Windows Mobile 2003 (PPC2003)
        • # Si (_WIN32_WCE> = 0 × 0421) / / Windows Mobile 2003 SE (PPC2003SE)
        • # Si (_WIN32_WCE> = 0 × 0501) / / Windows Mobile 5.0
        • # Si (_WIN32_WCE> = 0 × 0502) / / Windows Mobile 6 Professional / Classic
        • # Si (WINCEOSVER> = 0 × 0300) / / WindowsCE3.0 plus tard (PPC2002)
        • # Si (WINCEOSVER> = 0 × 0420) / / WindowsCE4.2 plus tard (PPC2003)
        • # Si (WINCEOSVER> = 0 × 0500) / / WindowsCE5.0 plus tard (WM5.0)
    • Internet Explorer version
      • # Ifdef _WIN32_IE
        • # Si (_WIN32_IE> = 0 × 0200) / / Windows 95/NT 4.0 (4.00 Comctl32.dll, Shell32.dll 4,00)
        • # Si (_WIN32_IE> = 0 × 0300) / / Internet Explorer 3.0, 3.01, 3.02
        • # Si (_WIN32_IE> = 0 × 0400) / / Internet Explorer 4.0
        • # Si (_WIN32_IE> = 0 × 0401) / / Internet Explorer 4.01
        • # Si (_WIN32_IE> = 0 × 0500) / / Internet Explorer 5.0, 5.0a, 5.0b
        • # Si (_WIN32_IE> = 0 × 0501) / / Internet Explorer 5.01
        • # Si (_WIN32_IE> = 0 × 0550) / / Internet Explorer 5.5
        • # Si (_WIN32_IE> = 0 × 0600) / / Internet Explorer 6.0
        • # If (_WIN32_IE> = 0 × 0601) / / Internet Explorer 6.0 SP1
        • # Si (_WIN32_IE> = 0 × 0603) / / Internet Explorer 6.0 SP2
        • # Si (_WIN32_IE> = 0 × 0700) / / Internet Explorer 7.0
        • # Si (_WIN32_IE> = 0 × 0800) / / Internet Explorer 8.0

Notez <br /> préprocesseur, pour traiter en tant que 0 identifiant indéfini, # if __ GNUC__> = 3 ou plus, mais peut être utilisé comme gcc3,
Si vous essayez de déterminer si # __ GNUC__ <3 si le système gcc2, comprennent ceux qui ne sont pas du CCG.
Référence

Obtient la version de Windows

Mais je ne pense pas que je peux utiliser, provisoirement noter.
Si le compilateur ne peut être compilé sans problème et je pense que système Windows.
Provisoirement, compiler et confirmer l'opération a été réalisée en MinGW.

#include <windows.h> #include <stdio.h> int main(void) { unsigned int GV = GetVersion(); printf("GetVersion API(GV) = %08X\n\n", GV); printf("_winver = %08X\n", _winver); printf("_winmajor = %08X\n", _winmajor); printf("_winminor = %08X\n", _winminor); printf("_osver = %08X\n\n", _osver); printf("(( GV << 8 ) | (( GV >> 8 ) & 0XFF)) & 0XFFFF = %08X (= _winver)\n", (( GV << 8 ) | (( GV >> 8 ) & 0XFF)) & 0XFFFF ); printf("GV & 0XFF = %08X (= _winmajor)\n", GV & 0XFF ); printf("( GV >> 8 ) & 0XFF = %08X (= _winminor)\n", (( GV >> 8 ) & 0XFF)); printf("GV >> 16 = %08X (= _osver)\n\n\n", (GV >> 16) ); // Windows version(_winmajor, _winminor, _osver) printf("This system is ["); if ( _osver < 0X8000 ) { // NT Group (_osver LowWORD MSB = 0) switch (_winmajor) { case 3: case 4: printf ("Windows NT %u.%u Build %u", _winmajor, _winminor, _osver); break; case 5: switch (_winminor) { case 0: printf ("Windows 2000 Build %u", _osver); break; case 1: printf ("Windows XP Build %u", _osver); break; case 2: printf ("Windows Server 2003 family Build %u", _osver); break; default: printf ("NT Group Windows Build %u", _osver); } break; case 6: switch (_winminor) { case 0: printf ("Windows Vista or Windows Server 2008 Build %u", _osver); break; case 1: printf ("Windows 7 Build %u", _osver); break; default: printf ("NT Group Windows Build %u", _osver); } break; default: printf ("NTGroup Windows Build %u", _osver); } } else { switch (_winmajor ) { case 0: //Win32s Group case 1: case 2: case 3: printf ("Win32s Build %u", _osver & 0X7FFF); break; case 4: // 9X Group (_osver is invalid.) switch (_winminor) { case 0: printf ("Windows 95 Build ----"); break; case 10: printf ("Windows 98 Build ----"); break; case 90: printf ("Windows Me Build ----"); break; default: // To make sure printf ("Newer than Windows Me"); } break; default: // To make sure printf ("Newer than Windows Me"); } } printf("]"); return 0; } 

Partie 2 compilé avec MinGW l'Jpegopitm

Je pourrais se réunir en un seul endroit où il est plus correctif suivant changes'm un changement de Jpegoptim.c.

 @@ -53,6 +53,39 @@ #define ICC_IDENT_STRING "ICC_PROFILE\0" #define ICC_IDENT_STRING_SIZE 12 +#ifdef WIN32 +#define uid_t int +#define gid_t int +#define ROOT_UID 0 +#define ROOT_GID 0 +#define realpath(N,R) _fullpath((R),(N),_MAX_PATH) +uid_t getuid(void) +{ + return ROOT_UID; +} +uid_t geteuid(void) +{ + return ROOT_UID; +} +gid_t getgid(void) +{ + return ROOT_GID; +} +gid_t getegid(void) +{ + return ROOT_GID; +} +int setuid(uid_t uid) +{ + return (uid == ROOT_UID ? 0 : -1); +} +int setgid(gid_t gid) +{ + return (gid == ROOT_GID ? 0 : -1); +} + +#endif + void fatal(const char *msg); struct my_error_mgr { 

Compilé avec MinGW l'Jpegopitm

Je suis tombé une petite note pour compiler le jpegoptim.

  1. Décompressez le placement jpegoptim-1.2.3 sous msys / src /
  2. Début msys, entrez les commandes suivantes:
     $ cd /src/jpegoptim-1.2.3/ $ autoconf $ configure 
  3. configurer ne passe pas, l'erreur suivante de sortir
     configure: error: cannot find install-sh, install.sh, or shtool in aux "."/aux 
  4. à modifier comme suit configure.in
     @@ -3,7 +3,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(jpegoptim.c) AC_CONFIG_HEADER(config.h) -AC_CONFIG_AUX_DIR(aux) +AC_CONFIG_AUX_DIR(sub) AC_CANONICAL_HOST 
  5. Créer un sous-dossier, apporter de l'emplacement approprié, tel que install-sh (Dans l'exemple de jpeglib)
     $ mkdir sub $ cp ../jpeg-6bx/install-sh ../jpeg-6bx/config.sub ../jpeg-6bx/config.guess ./sub 
  6. Encore une fois, pour générer un fichier de configuration, exécutez la commande configure
     $ autoconf $ configure 
  7. Si vous configurez par le biais, vous courez le faire. Ensuite, récupérez les erreurs suivantes:
     jpegoptim.c:354: undefined reference to 'realpath' jpegoptim.c:354: undefined reference to 'realpath' 
  8. doivent être modifiés comme suit jpegoptim.c
     @@ -351,7 +351,11 @@ } break; case 'd': - if (realpath(optarg,dest_path)==NULL || !is_directory(dest_path)) { +#ifdef WIN32 + if (_fullpath(dest_path,optarg,MAXPATHLEN)==NULL || !is_directory(dest_path)) { +#else + if (realpath(optarg,dest_path)==NULL || !is_directory(dest_path)) { +#endif fatal("invalid argument for option -d, --dest"); } if (verbose_mode) @@ -441,8 +445,13 @@ fatal("splitdir() failed!"); strncpy(newname,argv[i],sizeof(newname)); } - snprintf(tmpfilename,sizeof(tmpfilename), +#ifdef WIN32 + snprintf(tmpfilename,sizeof(tmpfilename), + "%sjpegoptim-%d.tmp", tmpdir, (int)getpid()); +#else + snprintf(tmpfilename,sizeof(tmpfilename), "%sjpegoptim-%d-%d.tmp", tmpdir, (int)getuid(), (int)getpid()); +#endif } retry_point: 
  9. Encore une fois, la compilation est passé dans le faire.

il, bien qu'il soit dossier nommé auxiliaires des scripts auxiliaires tels que install-sh est-il une relique du système chaque BSD,
Vous ne pouvez pas créer un dossier nommé aux dossier spécial dans les vestiges de DOS sous Windows.
Par conséquent, nous stockons certains types de script auxiliaire de changer les "sub" références, vous pouvez créer un "sous" nouveau dossier, qui est inclus dans le logiciel du système GNU.
En outre, getuid realpath et qui était en erreur lors de la compilation est une fonction du système POSIX
A été supprimé ou remplacé par un autre qui fonctionne de la même ou parce que Windows n'existe pas.
Je ferais mieux de réécrire plus belle dans notre exemple, mais a remplacé le realpath pour passer de la compilation _fullpath

Accueil > tags> MinGW

Rechercher
Nourrir
Traduction
Japanese flagItalian flagKorean flagChinese (Simplified) flagChinese (Traditional) flagEnglish flagGerman flagFrench flagRussian flagVietnamese flagThai flag

Retour vers le haut de la page