Oh man I just replied to this PM not knowing there was a thread here.
Oh well here's my reply again:
> where do I start?
Start with a lib. Definitely. Learning how to use libs is important and is something you'll have to learn eventually. So you might as well get it out of the way now.
Here's a crash course:
A "library" is basically a bunch of code that someone else wrote that you can use.
The simplest libraries are "header only" which mean you just download the header files, #include them, and you can use all the stuff they provide. Some libraries in boost are like this.
More complicated libraries need to be compiled separately and then linked to your program. This process is more involved.
To help explain it... think of a library as a collection of header files and .lib files. header files define a bunch of functions that you can use, and the .lib files contain the bodies for those functions (much like .cpp files). The difference between .lib files and .cpp files is that .lib files are binary code that has already been compiled, whereas .cpp files are text that still need to be compiled.
You need to "link" to the libraries so that your program is able to find the function bodies.
There are two ways to link: statically and dynamically.
To link "statically" means you effectively build the library into your program as if it were part of your program. This results in a bigger exe (because it now includes all that code that was in the library).
To link "dynamically" means that the library code exists in a separate dll file. This results in a smaller exe since you don't have to have any lib code built into your program... but now your program then needs to have the dll in order to run.
Personally I prefer static linking whenever possible. Missing DLL errors are annoying and there are other complications involved with dynamic linking that I would rather not bother with.
>It's like, you have to "download third party libraries" and supposedly there
> are many third party libraries?
Tons. Anybody who writes code is able to put a library up on the web.
> How would we even know which one is reliable or not? How do we know if they
> are professionally made or not?
By reputation. If they're open source (which most of the good free ones are) you can just look at the source and decide for yourself if it's what you want. I wouldn't really worry about using a "malicious" library. They are extremely rare (I've never seen one) and I'm sure they'd be easy to spot.
>Also, the most important question is, after we "download" the lib file, how do
> we even integrate it in our IDE's?
This depends on the IDE. Assuming you're using Visual Studio, the process goes something like this:
1) Download the library source code
2) Open the project files in your IDE
3) Compile/Build the library
4) Add the library's source directory to your IDEs path list so that when you #include <libheader.h> it knows what directory to look in for that header file
5) Do the same thing as #4, but for the lib / library files
6) Make a new project that wants to use that library
7) #include the header you want
8) Go to your project settings, in the linker settings, under "additional libs", put "whateverlib.lib"
9) Build your project
>If only there was a tutorial for this. I can't find anywhere online that talks
> about "How To" download and install libs,
Very often, there are tutorials on the lib site. I know SFML (the game lib I recommend) does have tutorials on how to get it set up for some common IDEs.
http://www.sfml-dev.org/
One thing I definitely recommend, though, is always compile the source, even if there are premade DLL files available. It's often harder to get the premade DLLs working than it is to just compile from scratch. Plus if you want static linking (like I do) the DLLs are useless anyway.
> I don't even know what an API is.
An API is a fancy term for a group of functions/classes/types/etc that let you do something.
for example, iostream could be considered an API because it offers cout, cin, and a bunch of functions to make them work.
There's a subtle difference between "API" and "library". It's not worth splitting hairs about... at least not yet. But very basically, the API is just the 'user interface' of the library (ie: how you interact with it), whereas the library is the entire library. (The API is just part of the library)
So yeah, I recommend picking up SFML. SFML 2.0 is better, but is still in development so it might be harder for a newbie to set up. So if you want to take it easy for a first attempt, get SFML 1.6. There are tutorials on the site, and if you have problems/questions about getting it set up, I'm happy to help.