diff options
Diffstat (limited to 'schulung_tools')
| -rw-r--r-- | schulung_tools/linking/hello/Makefile | 43 | ||||
| -rw-r--r-- | schulung_tools/linking/hello/Makefile-lib | 37 | ||||
| -rw-r--r-- | schulung_tools/linking/hello/func.h | 7 | ||||
| -rw-r--r-- | schulung_tools/linking/hello/hello.c | 4 |
4 files changed, 65 insertions, 26 deletions
diff --git a/schulung_tools/linking/hello/Makefile b/schulung_tools/linking/hello/Makefile index a5b4c26..c383eae 100644 --- a/schulung_tools/linking/hello/Makefile +++ b/schulung_tools/linking/hello/Makefile @@ -1,33 +1,30 @@ -hello: hello.c libfunc.so - $(CROSS_COMPILE)gcc -g -ohello hello.c -L. -lfunc +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)gcc -hello2: hello.c libfunc.a - rm -f libfunc.so - $(CROSS_COMPILE)gcc -g -ohello2 hello.c -L. -lfunc +OBJS = hello.o -libfunc.so: libfunc.so.0.0.1 - ln -s libfunc.so.0.0.1 libfunc.so +CFLAGS = -g -Wall -Werror -I. +LDFLAGS = -L. -lfunc -libfunc.so.0.0.1: func1.o func2.o - $(CROSS_COMPILE)gcc -shared -olibfunc.so.0.0.1 -Wl,-soname,libfunc.so.0 func1.o func2.o +hello: $(OBJS) libfunc.so + $(CC) -ohello $(OBJS) $(LDFLAGS) -libfunc.a: func1.o func2.o - $(CROSS_COMPILE)ar cr libfunc.a func1.o func2.o - $(CROSS_COMPILE)ranlib libfunc.a +hello-static: $(OBJS) libfunc.a + rm -f libfunc.so + $(CC) -o$@ $(OBJS) $(LDFLAGS) -func1.o: func1.c - $(CROSS_COMPILE)gcc -fPIC -g -c func1.c +%.c: %.o + $(CC) -c -o$@ $(CFLAGS) $< -func2.o: func2.c - $(CROSS_COMPILE)gcc -fPIC -g -c func2.c +libfunc.%: + $(MAKE) -f Makefile-lib $@ -install_lib: libfunc.so.0.0.1 - echo "/opt/acme/lib" > /etc/ld.so.conf.d/acme.conf - mkdir -p /opt/acme/lib - cp libfunc.so.0.0.1 /opt/acme/lib - ldconfig +install: hello + $(MAKE) -f Makefile-lib install + cp $< /usr/bin/ clean: - rm -f hello hello2 *.o lib* + rm -f hello hello-static $(OBJS) + $(MAKE) -f Makefile-lib $@ -.PHONY: clean +.PHONY: install clean diff --git a/schulung_tools/linking/hello/Makefile-lib b/schulung_tools/linking/hello/Makefile-lib new file mode 100644 index 0000000..f3ac0de --- /dev/null +++ b/schulung_tools/linking/hello/Makefile-lib @@ -0,0 +1,37 @@ +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)gcc +AR = $(CROSS_COMPILE)ar +RANLIB = $(CROSS_COMPILE)ranlib + +REALNAME = libfunc.so.0.0.1 +SONAME = libfunc.so.0 +LINKERNAME = libfunc.so +STATICNAME = libfunc.a +OBJS = func1.o func2.o + +CFLAGS = -fPIC -g -Wall -Werror +LDFLAGS = -shared -Wl,-soname,$(SONAME) + +$(LINKERNAME): $(REALNAME) + ln -sf $< $@ + +$(REALNAME): $(OBJS) + $(CC) -o$@ $(LDFLAGS) $(OBJS) + +$(STATICNAME): $(OBJS) + $(AR) cr $@ $(OBJS) + $(RANLIB) $@ + +%.o: %.c + $(CC) -c -o$@ $(CFLAGS) $< + +install: $(REALNAME) + echo "/opt/acme/lib" > /etc/ld.so.conf.d/acme.conf + mkdir -p /opt/acme/lib + cp $< /opt/acme/lib/ + ldconfig + +clean: + rm -f $(OBJS) $(REALNAME) $(SONAME) $(LINKERNAME) $(STATICNAME) + +.PHONY: install clean diff --git a/schulung_tools/linking/hello/func.h b/schulung_tools/linking/hello/func.h new file mode 100644 index 0000000..cefd769 --- /dev/null +++ b/schulung_tools/linking/hello/func.h @@ -0,0 +1,7 @@ +#ifndef FUNC_H +#define FUNC_H + +extern void func1(void); +extern void func2(void); + +#endif /* FUNC_H */ diff --git a/schulung_tools/linking/hello/hello.c b/schulung_tools/linking/hello/hello.c index 82b8d53..9b8d43a 100644 --- a/schulung_tools/linking/hello/hello.c +++ b/schulung_tools/linking/hello/hello.c @@ -1,7 +1,5 @@ #include <stdio.h> - -void func1(void); -void func2(void); +#include <func.h> int main(void) { |
