OK, Ive seen a lot of questions lately about compiling programs in Linux so I decided to write this for you guys. I hope it helps out. Letˇ¦s start out with the basics.

Vocabulary
Source: Youve probably seen this before Download Source In Linux (or unix) you will most likely be dealing with source code. This is actually the raw instructions that are written by the programmer. You can not run these! So dont try . You need to first compile them (well get to that later)

Binaries: Binaries are code that has been compiled. If you are downloading binaries you will need to insure that the binary was compiled on the same distro and chipset you are using. Most Linux users will always say it is better to compile everything from the source. In most cases this is true. But, if you are a beginner try to find binaries:-)

Compiler: This is the actual program that interprets the source into a binary format. Logically, your compiler must be for the language the source was written. The vast majority of the time it will be a C compiler, the most common is gcc.

Files you will need:
A compiler (duh) ok for this tutorial we are going to use gcc.

But it's apt-get install gcc if you want it, or select development modules from tasksel.

Some more basics:

Another thing a lot of beginners get confused with is the difference between a script and the source for a program. Scripts like pearl, PHP, ASP, and VBScript are interpreted at runtime. A compiled program is interpreted when you actually compile it, and then simply run. This means respective to their complexity compiled programs run faster than scripts.

Most software for Linux and other open source platforms are distributed as source code, usually a compressed archive commonly known as the tarball. This just means the file is in a compressed format, pretty much the same thing as a ZIP file.

Usually before you compile any programs, you should be logged in is a root user. You can do this by logging in as root or by typing su at the command line.

Another common mistake people make is to not have the required libraries. Libraries are shared code, that a program needs to run. For example: most programs that use extensive references to a certain type of protocol, such as SNMP will use a common library written by another programmer. Always check the readme file to see what libraries a program might need.

OK, the start out with a simple program we could write:

Code:

Int main(){
Printf(ˇ§Hello, worldˇ¨);
}

All this program does, is print hello world, easy enough, let's save it as test.c. Now to compile it just type:

Code:

gcc test.c

Now we should have a working binary program called a.out by default. If you want to give it a different name just type:

Code:

gcc test.c -o test1

The will output the file as test1.

Now remember how we talked about libraries, well libraries are included in source by the following:

Code:

#include <SDL/SDL.h>

All includes will be displayed at the top of the source code to be within good programming principles. Now, when we compile our program that contains includes we need to tell GCC where the library is located, so that a permanent link can be made within the program. We do this by the following:

Code:

gcc test.c -o test1 -L/usr/lib -ISDL

OK, here's quick English rundown of what we just did. We told GCC to compile our source test.c and output it as test1 and told it that the library SDL was located in /usr/Lib.

Now I hope this helped you guys out a little bit. The final thing I'm going to cover, is a lot of people see in the install files of a lot of programs that they need to run ./configure. Now when I was just beginning I used to get frustrated, because I would type that at the command line, and I would get file not found. The trouble you're having is you are not in the correct shell of Linux. To fix this just type:

Code:

sh ./configure

OK, that just about wraps it up. I hope I was able to answer most of your questions, if you have any more just ask me. I'll do my best to answer any questions.

i'm trying to install a new kernel in my version of RH7.1 my currnet kernel is version 2.4.2-2 and i'm trying to install linux2.6.0-test1 which i've downloaded from some site.

Now for the problem, should i just copy the new kernel to the same folder as the old kernel is in, and then delete the old kernel? can't imagine that, for the most part i've found on the internet that you should change the directory of the kernel to the new one somewhere, don't know where...

Nice tut Gsecure, you might want to add that if they want to run test1 if they're in that directory where it is to type ./test1 and you can see the output of the file but that's more programming now.

Lepri
I take it you done make xconfig (<=loaded up the old .config file if necessary)
make dep bzImage modules modules_install

If you're in /usr/src then the folder where you're new kernel is you can type cp arch/i386/boot/bzImage /boot/vmlunix-2.6.0-test1
then type cp System.map /boot/System.map-2.6.0-test1
Then depending on bootloader edit the bootloader .conf file and add the new kernel and run the bootloader in the shell to update it. I wouldn't delete any kernel especially as it's a test one, just choose the one you want to run at boot time.

That's how I would do it anyway and have done for a while and it works amazingly ,any probs just ask.

Viggel

Isn't make dep depreciated? I usually just make;make modules;make modules_install. During make, the bzImage is generated automatically.

Linux is not an acronym, it's just Linux; not LINUX. And it's a kernel, so there's no "gcc C compiler" in it. You probably meant to say GNU/Linux.

GCC, on the other hand, is an acronym (points for guessing what it stands for). And as BluePass noted, it's not just a C compiler (nor is it even just a compiler in the first place).

If you want to have a positive and productive conversation, we can do that, and we can all have fun and talk. If, on the other hand, you just want to throw unwarranted flame bait around and spam your commercial signature, we can do that too - the "delete post" button comes very handy in those cases.