亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: Android原生(Native)C開發(fā):編譯選項小結 [打印本頁]

作者: yf956613    時間: 2011-12-21 08:41
標題: Android原生(Native)C開發(fā):編譯選項小結
在Android的所有源碼中,只有最頂層的目錄有一個Makefile,其它所有項目都是調用這個文件進行編譯。如果用"showcommands"打出詳細編譯信息,你會看到大量的編譯選項,其實根本不需要這么多,做如下步驟:
  • 將所有頭文件復制到 toolchain 的 include 目錄,可減少大量的 -I (頭文件查找目錄)選項,具體請參見:Android原生(Native)C開發(fā)之八:Toolchain環(huán)境搭建篇;
  • 更多選項查看 $android_src/build/core/combo/linux-arm.mk,這是一個為Android準備的編譯選項文件,基本上大部分的項目的編譯都依賴此文件。
做完了上面兩步,以下是我整理的一些編譯選項:
  • 編譯普通C文件,CFLAGS如下:
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。





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2