首頁 >標籤>的MinGW

MinGW的

指令

注意隔離部分的編寫跨平台的代碼依賴於平台的預處理器指令。

  • 編譯器
    • 海灣合作委員會
      • #IFDEF _ GNUC__
        • 或以上#如果__ GNUC__> = 3 / / GCC3.0
    • 用Borland C + +
      • #IFDEF _ BORLANDC__
    • 英特爾編譯器
      • #IFDEF _ INTEL_COMPILER
    • 微軟的編譯器
      • #IFDEF _MSC_VER
        • 以後如果_MSC_VER> = 600 / / C編譯器6.0 +包括#的VC
        • 以後如果_MSC_VER> = 700 / /的C / C + +編譯器7.0 +包括#的VC
        • #後來如果_MSC_VER> = 800 / / VC + +1.0
        • #後來_MSC_VER> = 900 / / VC + +2.0
        • #後來如果_MSC_VER> = 1000 / / VC + + 4.0
        • #後來如果_MSC_VER> = 1010 / / VC + +4.1
        • #後來如果_MSC_VER> = 1020 / / VC + + 4.2
        • #後來如果_MSC_VER> = 1100 / / VC + +5.0
        • #後來如果_MSC_VER> = 1200 / / VC + + 6.0
        • #如果_MSC_VER> = 1300 / / VC2002(VC7.0)
        • #如果_MSC_VER> = 1310 / / VC2003(VC7.1)
        • #如果_MSC_VER> = 1400 / / VC2005(VC8.0)
        • #如果_MSC_VER> = 1500 / / VC2008(VC9.0)
        • #如果_MSC_VER> = 1600 / / VC2010後(VC10.0)
  • UNIX系統
    • UNIX的
      • #IFDEF _ UNIX
      • #IFDEF _ unix__
    • Linux的
      • #IFDEF _ LINUX
      • #IFDEF _ linux__
    • FreeBSD的
      • #IFDEF _ FreeBSD__
    • NetBSD的
      • #IFDEF _ NetBSD__
    • Cygwin的
      • #IFDEF _ CYGWIN__
      • #Cygwin的版本IFDEF __ CYGWIN32__ / / 32位
    • MinGW的(MNO-cygwin的)
      • #IFDEF _ MINGW32__
  • Windows系統
      • #IFDEF _CONSOLE
    • 圖形用戶界面
      • #IFDEF _WINDOWS
    • 32位Windows
      • #IFDEF WIN32的
      • #IFDEF _WIN32
    • 64位Windows
      • #IFDEF _WIN64
    • Windows版本
      • #IFDEF的WINVER
        • 由於#(WINVER> = 0x030a)/ / Windows 3.1的
        • #自95 / NT 4.0(WINVER> = 0×0400)/ / Windows的如果
        • 由於#(WINVER> = 0×0410)/ / Windows 98中
        • 由於#(WINVER> = 0×0500)/ /視窗ME / 2000
        • 由於#(WINVER> = 0×0501)/ /的Windows XP / Server 2003中
        • #自2003年以來SP1(WINVER> = 0×0502)/ /的Windows XP SP2中/服務器,如果
        • 由於#(WINVER> = 0×0600)/ /的Windows Vista / Server 2008中
        • 由於#(WINVER> = 0×0601)/ / Windows 7的
      • #IFDEF _WIN32_WINDOWS / /在Windows9x
        • #如果以後(_WIN32_WINDOWS> = 0×0400)/ / Windows 95中
        • #如果以後(_WIN32_WINDOWS> = 0×0410)/ / Windows 98的
        • #如果以後(_WIN32_WINDOWS> = 0×0500)/ / Windows的我
      • #IFDEF _WIN32_WINNT / / WindowsNTx的
        • 由於Windows 2000 / /(0×0500)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WIN2K)
        • / /由於2003年的Windows XP /服務器(0×0501)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WINXP)
        • / /自2003 SP1的Windows XP SP2中/服務器(0×0502)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WS03)
        • / /從Windows Vista(0×0600)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_VISTA)
        • / /從Windows Server 2008(0×0600)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WS08)
        • / /從Windows 7(0×0601)
          #如果(_WIN32_WINNT> = _WIN32_WINNT_WIN7)
      • #IFDEF _WIN32_WCE / / WindowsCE的
        • #如果(_WIN32_WCE> = 0×0420)/ /的Windows Mobile 2003(PPC2003)
        • #如果(_WIN32_WCE> = 0×0421)/ /的Windows Mobile 2003 SE上(PPC2003SE)
        • #如果(_WIN32_WCE> = 0×0501)/ /的Windows Mobile 5.0
        • #如果(_WIN32_WCE> = 0×0502)/ /的Windows Mobile 6專業版/經典
        • #如果(WINCEOSVER> = 0×0300)/ / WindowsCE3.0(PPC2002)
        • #如果(WINCEOSVER> = 0×0420)/ / WindowsCE4.2後(PPC2003)
        • #如果(WINCEOSVER> = 0×0500)/ / WindowsCE5.0(WM5.0)
    • Internet Explorer版本
      • #IFDEF _WIN32_IE
        • #如果(_WIN32_IE> = 0×0200)/ /的Windows 95/NT 4.0(4.00的Comctl32.dll,Shell32.dll的4.00)
        • #如果(_WIN32_IE> = 0×0300)/ /的Internet Explorer 3.0,3.01,3.02
        • #如果(_WIN32_IE> = 0×0400)/ / Internet瀏覽器4.0
        • #如果(_WIN32_IE> = 0×0401)/ /互聯網瀏覽器4.01
        • #如果(_WIN32_IE> = 0×0500)/ /的Internet Explorer 5.0,5.0A,5.0b
        • #如果(_WIN32_IE> = 0×0501)/ / Internet Explorer的5.01
        • #如果(_WIN32_IE> = 0×0550)/ /因特網瀏覽器5.5
        • #如果(_WIN32_IE> = 0×0600)/ / Internet瀏覽器6.0
        • #如果(_WIN32_IE> = 0×0601)/ /互聯網瀏覽器6.0 SP1的
        • #如果(_WIN32_IE> = 0×0603)/ /互聯網瀏覽器6.0 SP2
        • #如果(_WIN32_IE> = 0×0700)/ /因特網瀏覽器7.0
        • #如果(_WIN32_IE> = 0×0800)/ / Internet Explorer的8.0

注意<br />預處理,視為0未定義的標識符,#如果__ GNUC__> = 3或更多,但可以作為GCC3
如果您嘗試確定#__ GNUC__ <3是否系統GCC2,包括那些不海合會。
參考

獲取的Windows版本

但我不認為我可以使用,初步注意。
如果編譯器可以編譯沒有問題,我想系統的Windows。
暫定,編譯,並確認在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; } 

第2部分編譯使用MinGW Jpegopitm

我可能會在一個地方共同的地方,它是修復後changes'm的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 { 

編譯的MinGW的Jpegopitm

我迷迷糊糊一點點注意到編譯Jpegoptim的。

  1. MSYS / src目錄下解壓安置jpegoptim-1.2.3 /
  2. 啟動MSYS,輸入以下命令:
     $ cd /src/jpegoptim-1.2.3/ $ autoconf $ configure 
  3. 配置不及格,以下錯誤出來
     configure: error: cannot find install-sh, install.sh, or shtool in aux "."/aux 
  4. 要修改如下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. 創建一個子文件夾,把從適當的位置,如安裝SH(例如Jpeglib)
     $ mkdir sub $ cp ../jpeg-6bx/install-sh ../jpeg-6bx/config.sub ../jpeg-6bx/config.guess ./sub 
  6. 再次,要生成一個配置文件,運行configure
     $ autoconf $ configure 
  7. 通過配置,如果你運行make。 然後得到以下錯誤:
     jpegoptim.c:354: undefined reference to 'realpath' jpegoptim.c:354: undefined reference to 'realpath' 
  8. 要修改象如下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. 再次,在make編譯通過。

,儘管它的文件夾名為AUX輔助腳本,如安裝SH它是一個系統的每一個BSD的遺物,
你不能創建一個文件夾命名為輔助的特殊文件夾在Windows中的DOS殘餘。
因此,我們儲存一些各種輔助腳本來改變“分”的提述,你可以創建一個“子”的新文件夾,其中包括在軟件系統的GNU。
此外,getuid真實路徑和錯誤是在編譯時是一個POSIX系統的功能
已被刪除或更換工作,因為Windows不存在相同或。
我有更好的重寫更美麗在我們的例子,但為了通過編譯_fullpath取代的真實路徑

首頁 >標籤>的MinGW

搜索
翻譯
Japanese flagItalian flagKorean flagChinese (Simplified) flagChinese (Traditional) flagEnglish flagGerman flagFrench flagRussian flagVietnamese flagThai flag

回到頁面頂部