• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Liutauras Vilda
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Roland Mueller
Bartenders:

How applications written in native languages are made cross platform

 
Ranch Hand
Posts: 90
Firefox Browser Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Applications like Firefox, VLC player . . .etc etc are available for mostly all types of OS. But they are implemented in platform dependent languages like c, c++.
Are they compile the source code for each and every OS by using related IDEs with platform dependent packages separately??
There are so many compilers like VC++, GCC . . .
Suppose i want to develop an application with c or c++, and i want to available that application for maximum OSs,
1. What is the procedure to select an IDE and tools for developing a software like this ??
2. what concepts i have to consider?

These are not my questions while i am in Java. .

Please explain in detail.
 
author
Posts: 60
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Sanjeev Charla wrote:Applications like Firefox, VLC player . . .etc etc are available for mostly all types of OS. But they are implemented in platform dependent languages like c, c++.
Are they compile the source code for each and every OS by using related IDEs with platform dependent packages separately??



Yes, the application is compiled separately for each platform, otherwise it won't work. This is why you see Linux downloads, Mac downloads and Windows downloads as separate entities.

Sanjeev Charla wrote:There are so many compilers like VC++, GCC . . .
Suppose i want to develop an application with c or c++, and i want to available that application for maximum OSs,
1. What is the procedure to select an IDE and tools for developing a software like this ??
2. what concepts i have to consider?



1. You can either stick to using a compiler that is available for all your targets, such as gcc, or you can choose a separate compiler for each target. The choice of IDE is entirely independent; choose something that you like to work in, whether that's Eclipse, Emacs, the MSVC IDE or something else. Then set up build scripts for each target.

You then need to choose libraries which are available across all your target platforms, or you have to write your own wrappers around the facilities available on each platform, so that your main code does not have to care. For example, you might choose to use wxwindows or QT for your GUI rather than MFC, since they are available on multiple platforms.

2. Generally, it is the OS APIs that differ, rather than the basic capabilities, though you might need to watch out for things like "long" being 64-bit on some platforms and 32-bit on others. Use libraries to hide the OS differences.
 
Rancher
Posts: 43081
77
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
As an example, GCC has backends that can emit native code for many platforms: http://gcc.gnu.org/backends.html
 
Sanjeev Charla
Ranch Hand
Posts: 90
Firefox Browser Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks for your valuable responses . . .
 
author
Posts: 36
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Anthony AJ is completely right and has basically said it all.

I will add that C was designed from the start to be as platform independent as possible, which was a somewhat paradoxical goal given that it also enabled people to write "closer to the hardware." So, depending on how you wrote your code, you could write your programs to be as platform indendent... or platform DEPENDENT... as you wanted.

And C++ inherits most of C's traits, particularly with regard to data types...

Certain things in C (still in C++) are potential land mines. Particularly bad is the fact that "int" type is usually 16 bits wide on 16-bit systems, while it is 32 bits wide on 32-bit systems. This means that code running perfrectly well on 32-bit systems can "break" badly after being recompiled for 16 bit systems!

Someday we will even have 64-bit systems, and then the "int" type will be promoted to what is currently available as the "long long int" type -- usually 64 bits.

Consequently, you might want to avoid "int" type altogether and stick to "short" "long" and "long long int"... but even with those, be careful, because C++ spec does not absoltuely guarantee specific sizes. Oops! (Top secret advice: if you want to do what Microsoft and other companies do, define types such as "INT32" and "INT16" in header files, which you then carefully maintain for different platforms.... then use INT16, INT32, and INT64 as your primitive types. Avoid the standard types. That's if you want to be REALLY careful.)


My strong advice to you -- if you cannot avoid platform specific code -- is to "modularize" your program as much as possible (object orientation can sometimes help there, by the way) so that all the platform specific stuff (your I/O functions for example) is handled by just a few functions or classes. Then, write the rest of your program to be as platform independent as possible, so that you don't need to rewrite everything when you compile for a new system. Keep everything platform-dependent in just one module which you can rewrite as you need to.


Of course, you absolutely have to recompile for each new environment or platform! Each platform will have its own compiler or compilers created for it. In each case, the compiler's function is to translate the (relatively) more generic C++ code into machine code for that will run on that particular platform... and by "platform," remember, I refer to a particular processor type (thus different machine code), system architecture, and operating system.

Hope this helps,


== Brian Overland
 
Don't count your weasels before they've popped. And now for a mulberry bush related tiny ad:
New web page for Paul's Rocket Mass Heaters movies
https://coderanch.com/t/785239/web-page-Paul-Rocket-Mass
reply
    Bookmark Topic Watch Topic
  • New Topic