- 論壇徽章:
- 0
|
在Android的所有源碼中,只有最頂層的目錄有一個Makefile,其它所有項目都是調(diào)用這個文件進行編譯。如果用"showcommands"打出詳細編譯信息,你會看到大量的編譯選項,其實根本不需要這么多,做如下步驟:
做完了上面兩步,以下是我整理的一些編譯選項:
CFLAGS = -O2 -include AndroidConfig.h
CFLAGS+= -msoft-float -fpic \
-ffunction-sections \
-funwind-tables \
-fstack-protector \
-fno-short-enums
- 編譯普通CPP文件,CXXFLAGS如下(與CFLAGS比,只是多了粗體的幾個選項):
CFLAGS = -O2 -include AndroidConfig.h
CFLAGS+= -msoft-float -fpic \
-ffunction-sections \
-funwind-tables \
-fstack-protector \
-fno-short-enums \
-fno-rtti \
-fstrict-aliasing \
-fno-exceptions \
-fomit-frame-pointer
- 可執(zhí)行程序鏈接選項(除了如下選項,還要再加上項目所需的庫,如-lm,-lstdc++等):
LIB_DIR = /cygdrive/e/toolchain/arm-eabi/lib
CRT_OBJS= $(LIB_DIR)/crtbegin_dynamic.o $(LIB_DIR)/crtend.o
LDFLAGS = -s -nostdlib -Bdynamic \
LDFLAGS+= -Wl,-T,armelf.x \
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections \
-Wl,-z,nocopyreloc \
-lc $(CRT_OBJS)
- 動態(tài)庫鏈接選項(編譯時將 libtest.so 替換成你的庫名,再加上項目所需的庫):
SDFLAGS = -s -nostdlib \
-Wl,-soname,libtest.so \
-Wl,-shared,-Bsymbolic \
-Wl,-T,armelf.xsc \
-Wl,--gc-sections \
-lc -lm
基本上,加上這些編譯選項,你就可以寫出自已的Makefile來編譯項目,我將這些編譯選項加上,已成功編譯SDL、jpeg、libpng等開源項目,更多的編譯選項請參見$android_src/build/core/combo/linux-arm.mk。
|
|