android ndk 를 이용한 Makefile 은 일반 toolchain 사용할 때 와는 조금 다른 옵션을 적용시켜 줘야합니다.

 

결정적인 차이는 bionic C library 를 사용하는데 있다고 할 수 있습니다.

 


1 #
2 # Makefile
3 #
4
5 CROSS_PREFIX = arm-linux-androideabi-
6 CP_DIR = /staff/woong
7
8 ##
 9 TARGET = tester
10 SRCS = main.c
11
12 ##
13 DIR_LIB = ./lib/
14 DIR_COMMON = $(DIR_LIB)common/
15 DIR_FANET = $(DIR_LIB)fanet/
16
17 SRCS_COMMON = $(DIR_COMMON)util.c
18 SRCS_FANET = $(DIR_FANET)tcp.c
19 SRCS += $(SRCS_COMMON) $(SRCS_FANET)
20
21 DIR_INC = ./include/
22 INC_COMMON = $(DIR_INC)common/
23 INC_FANET = $(DIR_INC)fanet/
24
25 INCLUDEDIRS += -I. -I$(DIR_INC) -I$(INC_COMMON) -I$(INC_FANET)
26
27 OBJS = $(SRCS:.c=.o)
28 CFLAGS = $(INCLUDEDIRS) -o -W -Wall -O2
29 CFLAGS += -msoft-float -mthumb-interwork -ffunction-sections -fstack-protector
30 CFLAGS += -fno-short-enums -fshort-wchar -DANDROID
31 LDFLAGS = $(LIVDIRS)
32 LDFLAGS = -nostdlib
33 LIBS = -lc
34
35 #---------------------------------------------------------------------
36 CC = $(CROSS_PREFIX)gcc
37 CXX = $(CROSS_PREFIX)g++
38 AR = $(CROSS_PREFIX)ar rc
39 AR2 = $(CROSS_PREFIX)ranlib
40 RANLIB = $(CROSS_PREFIX)ranlib
41 LD = $(CROSS_PREFIX)ld
42 NM = $(CROSS_PREFIX)nm
43 STRIP = $(CROSS_PREFIX)strip
44 OBJCOPY = $(CROSS_PREFIX)objcopy
45 CP = cp
46 MV = mv
47 #--------------------------------------------------------------------
48
49 all : $(TARGET)
50 cp $^ $(CP_DIR)/
51
52 $(TARGET) : $(OBJS)
53 $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)
54 $(NM) $(TARGET) > $(TARGET).map
55
56 %.o:%.c
57 @echo "Compiling $< ..."
58 $(CC) -c $(CFLAGS) -o $@ $<
59
Makefile
"Makefile" [converted] 80L, 1875C
58 $(CC) -c $(CFLAGS) -o $@ $<
59
60 %.o:%.cc
61 @echo "C++ compiling $< ..."
62 $(CXX) -c $(CFLAGS) $(CXXFLAGS) -o $@ $<
63
64 dep :
65 $(CC) -M $(INCLUDEDIRS) $(SRCS) > .depend
66
67 clean:
68 rm -f *.bak
69 rm -f *.map
70 rm -f *.o
71 rm -f $(OBJS)
72 rm -f $(TARGET) core
73
74 distclean: clean
75 rm -rf .depend
76
77 ifeq (.depend,$(wildcard .depend))
78 include .depend
79 endif
80

 

CFALG 에 잘 안쓰는 옵션들이 많이 추가된 것을 볼 수 있습니다.

 

"-nostdlib", "-lc" 옵션으로 boinic C 를 사용하게 한다고 보시면 됩니다.