Cross Platform GCC or C/C++ APP development

Contents

Contents

C/C++ backends

āϏāĻŋ āĻŦāĻž āϏāĻŋ++ āĻāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āϗ⧁āϞāĻŋ āĻŦā§āϝāĻžāĻ•āχāĻ¨ā§āĻĄ āφāϛ⧇ āϝ⧇āĻŽāύ gcc, clang, tcc etc. āĻāϗ⧁āϞ⧋āϰ āĻŽāĻĻā§āϧ⧇ gcc āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ āĻĒā§āϰāϚāϞāĻŋāϤ āĨ¤

Variants of GCC

gcc āĻāϰāĻ“ āĻ…āύ⧇āĻ• āϗ⧁āϞ⧋ āĻ…āĻĒāĻļāύ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ āĨ¤ gcc, āĻŽā§‚āϞāϤ GNU gcc āύāĻžāĻŽā§‡ āĻĒāϰāĻŋāϚāĻŋāϤ, āϝāĻžāϰ āĻĒā§‚āĻ°ā§āĻŖā§āύāĻžāĻŽ āĻšāĻšā§āϛ⧇ GNU Compiler Collection (GCC) āĨ¤ āϤ⧋ āĻ—ā§āύ⧁, gcc āĻāϰ āĻ¸ā§āϟāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄāĻžāχāĻœā§‡āĻļāύ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇ āĨ¤

Unix, BSD, Windows āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϜāĻ¨ā§āϝ āĻ—ā§āύ⧁ āϜāĻŋāϏāĻŋāϏāĻŋāϰ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āϏāĻžāĻŦāϏ⧇āϟ āĻŦāĻž āϏ⧁āĻĒāĻžāϰāϏ⧇āϟ āϧāϰāύ⧇āϰ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ āĨ¤ āϝ⧇āĻŽāύāσ āωāχāĻ¨ā§āĻĄā§‹āĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻŽāĻŋāĻžā§āϜāĻŋāĻĄāĻŦā§āϞāĻŋāω(mingw), TDMgcc āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĨ¤ āϤāĻŦ⧇ mingw āĻ…āĻ¤ā§āϝāĻžāϧāĻŋāĻ• āϜāύāĻĒā§āϰāĻŋ⧟āĨ¤ MingW āϰ āĻŽāĻžāύ⧇ āĻšāĻšā§āϛ⧇ Minimalist gcc for Windows āĨ¤

Making a cross platform GCC app

āϝ⧇āĻŽāύāϟāĻŋ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āϞāĻžāĻŽ āϝ⧇ āϜāĻŋāϏāĻŋāϏāĻŋ āĻ•ā§āϰāϏ āĻ•āĻŽā§āĻĒāĻžāχāĻ˛ā§āĻĄ āύ⧟āĨ¤ āĻāϟāĻž āĻĒā§āϰāϤāĻŋāϟāĻž āĻĒā§āϞāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āĻ­āĻžāĻŦ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§ŸāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āϚāĻžāχāϞ⧇ āĻœā§‹ā§œāĻž āϤāĻžāϞāĻŋ āĻĻāĻŋā§Ÿā§‡ āĻāĻ•āϟāĻž āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ āϝ⧇āϟāĻž āĻ•ā§āϰāϏāĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻ•āĻŽā§āĻĒā§āϝāĻžāϟāĻŋāĻŦāϞāĨ¤

How is it possible

GCC āϰ āĻ•āĻŋāϛ⧁ āĻŽāĻĄāĻŋāĻĢāĻžāχāĻĄ āĻĢā§āϞ⧇āĻ­āĻžāϰ āφāϛ⧇ āϝ⧇āϗ⧁āϞ⧋ āωāχāύāĻŋāĻ•ā§āϏ āĻ¸ā§āϟāĻžāχāϞ āĻāĻĒāĻŋ⧟āĻžāχ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ āϝ⧇āĻŽāύāσāωāχāĻ¨ā§āĻĄā§‹āĻœā§‡ unistd.h, netdb.h, sys/socket.h āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻšā§‡āĻĄāĻžāϰ āĻĢāĻžāχāϞ āϗ⧁āϞ⧋ āύ⧇āχ āϝ⧇āϗ⧁āϞ⧋ āϞāĻŋāύāĻžāĻ•ā§āϏ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§ŸāĨ¤ āφāĻŦāĻžāϰ arpa/inet.h āϝ⧇āϟāĻž āĻŽā§āϝāĻžāϕ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ āϏ⧇āϟāĻžāĻ“ āĻŽāĻŋāϏāĻŋāĻ‚āĨ¤ āĻŽā§‹āϟāĻ•āĻĨāĻž *nix system āĻāϰ āĻŽā§āϝāĻžāĻ•ā§āϏāĻŋāĻŽāĻžāĻŽāχ not available āĨ¤ āϤ⧋ āĻ•ā§āϰāϏāĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāϤ⧇ āĻšāϞ⧇ āĻšā§Ÿ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϗ⧁āϞ⧋āϰ āϏāĻŽāĻ¨ā§āĻŦ⧟ āϏāĻžāϧāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻ…āĻĨāĻŦāĻž āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

Using Meta Programming

āĻĒā§āϰāĻŋāĻĒā§āϰāϏ⧇āϏāϰ āĻĻāĻŋā§Ÿā§‡ āφāĻŽāϰāĻž āϏāĻšāϝ⧇āχ on demand āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āχāύāĻ•ā§āϞ⧁āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āϝ⧇āĻŽāύāσ

c
#ifdef __linux__
#include<sys/socket.h>
#elif _WIN32
#include<winsock.h>
#else
#error "could not find"
#endif

Using special gcc implementation

āφāĻŦāĻžāϰ āϏ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ *nix āĻ¸ā§āϟāĻžāχāϞ⧇ āĻŦāĻž api āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ“ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•āĻŋāϛ⧁ āĻ¸ā§āĻĒ⧇āĻļāĻžāϞ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤāĻž āϏāĻžāϧāύ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āϝ⧇āĻŽāύāσ

  • Msys2
  • Cygwin

āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻĻ⧇āϰ āĻŽāĻžāĻā§‡āĻ“ āĻ•āĻŋāϛ⧁ āĻĒā§āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āφāϛ⧇āĨ¤

Msys2 vs Cygwin

Msys2 Cygwin
Most used Equally Famous
Built on Cygwin Independent
Hard to work on Easy to work on
Has a decent pkg manager Has some pkg management system

Conclusion

āĻ•ā§āϰāϏ āĻ•āĻŽā§āĻĒāĻžāχāϞ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ meta programming āχ āϏ⧇āϰāĻžāĨ¤ āϤāĻžāĻ“ āϝāĻĻāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāϧāύ āĻ•āϰāϤ⧇āχ āĻšā§Ÿ āϏ⧇āχ āϏ⧁āĻŦāĻŋāϧāĻž āϤāĻŦ⧇ āφāĻŽāĻžāϰ āĻĒāĻšā§āĻ›āĻ¨ā§āĻĻ Cygwin āϝāĻĻāĻŋāĻ“ Cygwin āĻāϰ āĻāĻ• āφāϞāĻžāĻĻāĻž āϞ⧇āϭ⧇āϞ⧇āϰ āϝāĻ¨ā§āĻ¤ā§āϰāύāĻž āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύāĨ¤

Cygwin āĻāϰ āωāĻĒāϰ āĻļāĻŋāĻ˜ā§āϰāχ āφāĻ°ā§āϟāĻŋāϕ⧇āϞ āϞāĻŋāĻ–āĻŦ āϤāĻŦ⧇ āχāĻ‚āϰ⧇āϜāĻŋāϤ⧇āĨ¤