首页 > 代码库 > 编译动态库和连接动态库

编译动态库和连接动态库

$ 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
$ 

编译动态库和连接动态库