Difference between revisions of "Building things without root access"

From HalfgeekKB
Jump to navigation Jump to search
Line 21: Line 21:
 
  gcc -o sample sample.c -lgmp
 
  gcc -o sample sample.c -lgmp
  
Add a couple things to make it work using your own version:
+
Add some things to make it work using your own version:
  
 
  gcc -o sample sample.c -lgmp -I- -I/user/inst/include -L/user/inst/lib
 
  gcc -o sample sample.c -lgmp -I- -I/user/inst/include -L/user/inst/lib
  
Any normal -I switches should come before -I-.  The -I- is optional if you use the header name is quotes instead of angles.
+
Any normal <code>-I</code> switches should come before <code>-I-</code>.  The <code>-I-</code> is optional if you use the header name in quotes instead of angles.
  
 
=Compiling CPAN Modules=
 
=Compiling CPAN Modules=

Revision as of 10:36, 2 June 2005

Here are a few notes on building C programs on a system you don't own and don't have root access to. Obviously, this has a few strange operational implications.

A pseudo-root

I'll be building things using a subdirectory of my home dir, /user/inst, as the basis of everything (basically replacing what would be /usr/local in normal installs).

./configure

If the autoconf variables are typical, things should run correctly by

./configure --prefix=/user/inst
make
make install

Run ./configure --help to find out if there are more variables to set.

Compiling based on non-global libs

Compiling a simple program based on Gnu MP normally looks like this:

gcc -o sample sample.c -lgmp

Add some things to make it work using your own version:

gcc -o sample sample.c -lgmp -I- -I/user/inst/include -L/user/inst/lib

Any normal -I switches should come before -I-. The -I- is optional if you use the header name in quotes instead of angles.

Compiling CPAN Modules

This one is tricky. Start by running

perl Makefile.PL PREFIX=/user/inst

Then, view the resulting Makefile. Find what is already in CCFLAGS and LDDLFLAGS. For example,

LDDLFLAGS = -shared -L/usr/local/lib
CCFLAGS = -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

Change them as necessary.

LDDLFLAGS = -shared -L/user/inst/include -L/usr/local/lib
CCFLAGS = -DDEBIAN -fno-strict-aliasing -I/user/inst/include -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

make and make install should then run as expected. To use the resulting module, you'll have to indicate your local libraries directory:

use lib '/user/inst/local/lib/perl/5.6.1','/user/inst/share/perl/5.6.1';

An include file can be used to abbreviate this:

BEGIN {
  my $sub = "perl/5.6.1";
  my $super = "/user/inst";
  unshift(@INC, "$super/local/lib/$sub", "$super/share/$sub");
}
1;