Compiling things on Ubuntu the Easy Way
Let’s say you are a moderately experienced Linux user, and you want to install an application off the Internet but it doesn’t have a nice package that works on your system. (If it does have a package, install it following the instructions on InstallingSoftware.)
A lot of users, even quite experienced ones, have issues with going from the tarball to the installed program because they just do not know the fairly easy steps required to get the job done. But it’s only easy if you already know how to do it! So, here’s a quick guide about how to install stuff from developer sites.
Step 1: Prep your system for building packages
By default, Ubuntu does not come with the tools required. You need to install the package build-essential for making the package and checkinstall for putting it into your package manager. These can be found on the install CD or in the repositories, searching in Synaptic Package Manager or the command-line apt-get:
sudo apt-get install build-essential checkinstall
And since you may want to get code from some projects with no released version, you should install appropriate version management software.
sudo apt-get install cvs subversion git-core mercurial
You should then build a common directory for yourself where you’ll be building these packages. We recommend creating /usr/local/src, but really you can put it anywhere you want. Make sure this directory is writable by your primary user account, by running
sudo chown $USER /usr/local/src
sudo chmod u+rwx /usr/local/src
After you’ve done this, you’re set up to start getting the programs you need.
Step 2: Getting the software you want
Most of the software you’ll generally want comes from released tarballs. These are just compressed archives with extensions like .tar.gz or .tar.bz2 — they are just like .zip files on Windows or .sit on MacOS X, if that analogy helps you. If the program you want to install comes in this form, you should move it into the /usr/local/src directory we made in Step 1 and extract it by right-clicking on the file and selecting Extract Here, or by using the command line: If your tarball is a .gz, extract the files with the command:
tar -xzvf tarballname.tar.gz
and for bz2 the similar command:
tar -xjvf tarballname.tar.bz2
In the rare case of getting a program from a cvs or subversion repository, the developers will generally provide instructions on how to do this on their website. If you already installed the packages listed on Step 1, you just need to change to your /usr/local/src directory (cd /usr/local/src) and run the commands that are listed. The procedure will vary from program to program, so I can’t help you here, but with the given packages the instructions they provide should work smoothly.
Note: If you downloaded from source such as Git, SVN, or any other source repository then it is likely that the ./configure files have not yet been generated. You may be able to run the command
from within the downloaded files top directory. This command relies on automake and autoconf programs and will automatically build the configuration files and run the ./configure command. After this step you can resume the later directions by running the command
Step 3: Resolving Dependencies.
- You probably want to read about the possibilities and limitations of auto-apt first, which will attempt to take care of dependency issues automatically. The following instructions are for fulfilling dependencies manually:
To prepare, install the package apt-file, and then run sudo apt-file update. This will download a list of all the available packages and all of the files those packages contain, which as you might expect can be a very large list. It will not provide any feedback while it loads, so just wait.
The apt-file program has some interesting functions, the two most useful are apt-file search which searches for a particular file name, and apt-file list which lists all the files in a given package. (Two explanations: 1 2)
- If you run ./configure without any options, you will use the default settings for the program. Most programs have a range of settings that you can enable or disable, if you are interested in this check the README and INSTALL files found in the directory after decompressing the tar file. You can check the developer documentation and in many cases ./configure --help will list some of the key configurations you can do. A very common options is to use ./configure --prefix=/usr which will install your application into /usr instead of /usr/local as my instructions do.
If this happens, the last line of output will be something like
configure: error: Library requirements (gobbletygook) not met, blah blah blah stuff we don't care about
But right above that it will list a filename that it cannot find (often a filename ending in «.pc», for instance). What you need to do then is to run
apt-file search missingfilename.pc
which will tell you which Ubuntu package the missing file is in. You can then simply install the package using
sudo apt-get install requiredpackage
Then try running ./configure again, and see if it works. If you get to a bunch of text that finishes with config.status: creating Makefile followed by no obvious error messages, you’re ready for the next steps.
Step 4: Build and install.
If you got this far, you’ve done the hardest part already. Now all you need to do is run the command
which does the actual building (compiling) of the program.
- If it’s a large program or if you’ve got a very slow computer, go and get a cup of coffee or something. If you have a multi-core processor you can also set the variable CONCURRENCY_LEVEL to the number of processors/cores you have to speed things up a little.
When its done, install the program. You probably want to use
which puts the program in the package manager for clean, easy removal later. This replaces the old sudo make install command. See the complete documentation at CheckInstall.
Note: If checkinstall fails you may need to run the command like
sudo checkinstall --fstrans=0
Which should allow the install to complete successfully. Bugs: 78455 & 599163
Then the final stage of the installation will run. It shouldn’t take long. When finished, if you used checkinstall, the program will appear in Synaptic Package Manager. If you used sudo make install, your application will be installed to /usr/local/bin and you should be able to run it from there without problems.
- If this all seems way too hard for you, don’t fret. You’re using Ubuntu after all, and it has all of the programs that you actually need to get your work done already packaged for you. If there isn’t a package out there, the odds are that you really don’t need the program and within a few months someone will have packaged it for you. The only programs you actually need to build and compile like this are programs that are new and perhaps not yet stable or ready for your desktop. If you think this procedure is too hard, well maybe you ought to reconsider why you want to do this and just wait a few months for the next stable release. But it can be a good learning experience for you.
If your desired package is quite important and you think it deserves to be in Ubuntu properly, perhaps contact the Masters of the Universe and see if they can do the hard work for you — if they package something, anyone can install it without having to go through this procedure. But if you can get through all this, you’re well on your way to becoming an expert Linux user — you’d be surprised how easy all this seems after you’ve done it just a few times. Good luck!
- Easy meaning «easier than tearing your hair out and then screaming about how much Linux sucks while running around the room». Not actually easy.
Attachments
The process described in this page can be performed without typing terminal commands, using the attached application. Download the package kludge_tarball_installer_v0.10.tar, extract it to your user folder, and see the README file.
Links
Comments
- The «easy» tutorial should be the default one (at CompilingSoftware), and the «advanced» tutorial should be at a name like CompilingSoftwareAdvanced. The target audience for a document like this is people who have never done any of this stuff before. Make the default document as easy to use as possible.
- Would it be better to change the group of /usr/local/src/ to admin and give them rwx privleages? Since anyone adding and removing software should be in the admin group.
*Would be nice to see an example tar ball included in the post. Would make it easy for someone to test the steps.
CompilingEasyHowTo (последним исправлял пользователь knome 2013-12-13 21:04:47)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details
How to Compile a Program in Linux
wikiHow is a “wiki,” similar to Wikipedia, which means that many of our articles are co-written by multiple authors. To create this article, 17 people, some anonymous, worked to edit and improve it over time.
The wikiHow Tech Team also followed the article’s instructions and verified that they work.
This article has been viewed 129,067 times.
Source code is a computer program in human readable form. However, the machine cannot execute source code. The code must be compiled into machine code before it is useful. On Linux, the «make» build system is the most common one, and this how-to works for almost all Linux source code packages.
Download the source code for the program or driver from the Internet or other media. It will most likely be in the form of a «tarball» and have a file extension of .tar, .tar.bz2, or .tar.gz. Sometimes a .zip file will be used instead however.
Unpack the downloaded code- for .zip files use «unzip your file», for .tgz or .tar.gz use «tar -zxvf yourfile»; for .bz2 use «tar -jxvf yourfile»; or extract your files graphically.
In the terminal, move into the newly extracted directory. You do this by typing cd followed by a space and then the name of the directory. (Remember that directory names in Linux are case sensitive).
Run the command «./configure» to configure the source code automatically. Arguments such as » —prefix clearall»>
Once configured, run «make» which does the actual compiling (this can take anything from a few seconds to many hours). An executable for the program will be created in the bin directory inside the source code directory.
Expert Q&A
On multicore processors, you may compile in a multithreaded fashion using make -j3, replacing 3 with however many threads you want to use.
If the build fails for any reason, before you attempt to build again you should run «make clean» to remove all files left behind by the original build attempt. These files may make your second attempt fail because they exist.
Compiling and replacing critical system components can cause problems if you recompile and reinstall them. Know what you are doing.
Some source packages don’t have configure files or even make files. In this case, just type `make’ at the prompt and see what happens.
You Might Also Like
Ubuntu Software Installation: The Complete Beginner’s Guide
Can Linux Run .exe Files? How to Run Windows Software on Linux
How to Open Linux Firewall Ports: Ubuntu, Debian, & More
How to Run an INSTALL.sh Script on Linux in 4 Easy Steps
Use Ping in Linux: Tutorial, Examples, & Interpreting Results