Una libreria condivisa (Shared Library) è un file binario contenente un insieme di funzioni richiamabili o classi.
Esse hanno un nome particolare, detto soname, composto dalle lettere iniziali lib, dal nome della libreria, da .so, da un punto e dal numero della versione.

Supponiamo di avere i file:

File mymath.h

int add(int,int);
int mul(int,int);

File mymath.cpp

int add(int x, int y)
{
	return x+y;
}

int mul(int x, int y)
{
	return x*y;
}

e di voler creare una libreria condivisa.
Creiamo la libreria con:

g++ -c -fPIC mymath.cpp
g++ -shared mymath.o -o libmymath.so

utilizzando -fPIC per abilitare la generazione di codice non dipendente dalla posizione (Position Indipendent Code).

Installiamo ora la libreria:

cp libmymath.so /usr/local/lib/
cp mymath.h /usr/local/include/

e vediamo come utilizzarla.

File main.cpp

#include <iostream>
#include <mymath.h>

int main()
{
	std::cout << add(3,9) << std::endl;
	std::cout << mul(2,3) << std::endl;
}

Non rimane che compilare il programma:

g++ main.cpp -o main -lmymath

Il seguente script crea una libreria condivisa e la installa o rimuove:

#!/bin/bash

command=$1
filename=$2

if [ $# -ne 2 ]
then
	echo "Usage: ./lib.sh <[gcc|g++|install|remove]> <filename>"
	exit 1
fi

if [ $command == "gcc" -o $command == "g++" ]
then
	$command -fPIC -c "$filename".cpp && \
	$command -shared "$filename".o -o lib"$filename".so
	rm "$filename".o
elif [ $command == "install" ]
then
	echo Copying "$filename".h to /usr/local/include...
	cp "$filename".h /usr/local/include/
	echo Moving lib"$filename".so to /usr/local/lib...
	mv lib"$filename".so /usr/local/lib/
elif [ $command == "remove" ]
then
	echo Removing "$filename".h from /usr/local/include...
	rm /usr/local/include/"$filename".h
	echo Removing lib"$filename".so from /usr/local/include
	rm /usr/local/lib/lib"$filename".so
fi

Sempre in riferimento all’esempio precedente, per utilizzare questo script bisogna posizionarsi nella cartella dove sono collocati i file mymath.h e mymath.cpp e dare il comando:

./lib.sh gcc mymath
./lib.sh install mymath

A quel punto, tutti i programmi che utilizzerano le funzioni definite in mymath.h potranno essere compilati, ad esempio, con:

g++ main.cpp -o main -lmymath