$ mkdir 1;cd 1
$ cat >plus.c
int plus(int i0, int i1)
{
return i0 + i1;
}
$ cat >plus.h
int plus(int i0, int i1);
$ cat >main.c
#include "plus.h"
int main(void)
{
return plus(1,2);
}
$ cat >Makefile
main: main.o libplus.so plus.h
gcc -g -L. -o main main.o -lplus
rm main.o plus.o
main.o: main.c
gcc -c -g -o main.o main.c
libplus.so: plus.o
gcc -g -shared -o libplus.so plus.o
plus.o: plus.c
gcc -c -g -fPIC -o plus.o plus.c
.PHONY: clean
clean:
rm main libplus.so main.o plus.o
$ ls
Makefile main.c plus.c plus.h
$ make
gcc -c -g -o main.o main.c
gcc -c -g -fPIC -o plus.o plus.c
gcc -g -shared -o libplus.so plus.o
gcc -g -L. -o main main.o -lplus
rm main.o plus.o
$ file libplus.so
libplus.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
$ file main
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ LD_LIBRARY_PATH=.
$ ldd main | grep plus
libplus.so => ./libplus.so (0x00007f8018644000)
$ ./main
$ echo $?
3
$