Android.mk与Linux Makefile研究心得

来源:互联网 发布:权宁一 知乎 编辑:程序博客网 时间:2024/05/17 01:46
一、Android NDK中列出的部分库文件:



|-- crtbegin_dynamic.o

|-- crtbegin_static.o

|-- crtend_android.o



|-- libc.a



|-- libc.so



|-- libdl.so



|-- liblog.so



|-- libm.a



|-- libm.so



|-- libstdc++.a



|-- libstdc++.so



|-- libthread_db.a



|-- libthread_db.so



`-- libz.so









二、libstdc++.a编译过程分析



$ ar x libstdc++.a

libstdc++.a




|-- new.o

|-- one_time_construction.o

|-- pure_virtual.o

`-- typeinfo.o







target thumb C++: libstdc++ <= bionic/libstdc++/src/one_time_construction.cpp

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ -I system/core/include -I hardware/libhardware/include -I hardware/libhardware_legacy/include -I hardware/ril/include -I dalvik/libnativehelper/include -I frameworks/base/include -I frameworks/base/opengl/include -I external/skia/include -I out/target/product/generic/obj/include -I bionic/libc/arch-arm/include -I bionic/libc/include -I bionic/libstdc++/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -I bionic/libm/include -I bionic/libm/include/arch/arm -I bionic/libthread_db/include -I bionic/libstdc++ -I out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates -c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ -include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -fno-rtti -MD -o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/one_time_construction.o bionic/libstdc++/src/one_time_construction.cpp

target thumb C++: libstdc++ <= bionic/libstdc++/src/new.cpp

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ -I system/core/include -I hardware/libhardware/include -I hardware/libhardware_legacy/include -I hardware/ril/include -I dalvik/libnativehelper/include -I frameworks/base/include -I frameworks/base/opengl/include -I external/skia/include -I out/target/product/generic/obj/include -I bionic/libc/arch-arm/include -I bionic/libc/include -I bionic/libstdc++/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -I bionic/libm/include -I bionic/libm/include/arch/arm -I bionic/libthread_db/include -I bionic/libstdc++ -I out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates -c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ -include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -fno-rtti -MD -o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/new.o bionic/libstdc++/src/new.cpp

target thumb C++: libstdc++ <= bionic/libstdc++/src/pure_virtual.cpp

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ -I system/core/include -I hardware/libhardware/include -I hardware/libhardware_legacy/include -I hardware/ril/include -I dalvik/libnativehelper/include -I frameworks/base/include -I frameworks/base/opengl/include -I external/skia/include -I out/target/product/generic/obj/include -I bionic/libc/arch-arm/include -I bionic/libc/include -I bionic/libstdc++/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -I bionic/libm/include -I bionic/libm/include/arch/arm -I bionic/libthread_db/include -I bionic/libstdc++ -I out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates -c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ -include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -fno-rtti -MD -o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/pure_virtual.o bionic/libstdc++/src/pure_virtual.cpp

target thumb C++: libstdc++ <= bionic/libstdc++/src/typeinfo.cpp

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ -I system/core/include -I hardware/libhardware/include -I hardware/libhardware_legacy/include -I hardware/ril/include -I dalvik/libnativehelper/include -I frameworks/base/include -I frameworks/base/opengl/include -I external/skia/include -I out/target/product/generic/obj/include -I bionic/libc/arch-arm/include -I bionic/libc/include -I bionic/libstdc++/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -I bionic/libm/include -I bionic/libm/include/arch/arm -I bionic/libthread_db/include -I bionic/libstdc++ -I out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates -c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ -include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -fno-rtti -MD -o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/typeinfo.o bionic/libstdc++/src/typeinfo.cpp

target StaticLib: libstdc++ (out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/libstdc++.a)

prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-ar crs out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/libstdc++.a out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/one_time_construction.o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/new.o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/pure_virtual.o out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/src/typeinfo.o









三、libstdc++.so的编译过程分析




target thumb C++



: libstdc++ <= bionic/libstdc++/src/one_time_construction.cpp





prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++



-I system/core/include



-I hardware/libhardware/include



-I hardware/libhardware_legacy/include



-I hardware/ril/include



-I dalvik/libnativehelper/include



-I frameworks/base/include



-I frameworks/base/opengl/include



-I external/skia/include



-I out/target/product/generic/obj/include



-I bionic/libc/arch-arm/include



-I bionic/libc/include



-I bionic/libstdc++/include



-I bionic/libc/kernel/common



-I bionic/libc/kernel/arch-arm



-I bionic/libm/include



-I bionic/libm/include/arch/arm



-I bionic/libthread_db/include



-I bionic/libstdc++



-I out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates



-c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums



-march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__



-include system/core/include/arch/linux-arm/AndroidConfig.h



-I system/core/include/arch/linux-arm/ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG



-g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop



-frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer



-fno-strict-aliasing -finline-limit=64 -fno-rtti -MD



-o out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/one_time_construction.o bionic/libstdc++/src/one_time_construction.cpp







target thumb C++


: libstdc++ <= bionic/libstdc++/src/new.cpp







prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++



-I system/core/include



-I hardware/libhardware/include



-I hardware/libhardware_legacy/include



-I hardware/ril/include



-I dalvik/libnativehelper/include



-I frameworks/base/include



-I frameworks/base/opengl/include



-I external/skia/include



-I out/target/product/generic/obj/include



-I bionic/libc/arch-arm/include



-I bionic/libc/include



-I bionic/libstdc++/include



-I bionic/libc/kernel/common



-I bionic/libc/kernel/arch-arm



-I bionic/libm/include



-I bionic/libm/include/arch/arm



-I bionic/libthread_db/include



-I bionic/libstdc++



-I out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates



-c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te



-mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__



-include system/core/include/arch/linux-arm/AndroidConfig.h



-I system/core/include/arch/linux-arm/ -mthumb-interwork



-DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG



-g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop



-frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer



-fno-strict-aliasing -finline-limit=64 -fno-rtti -MD



-o out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/new.o bionic/libstdc++/src/new.cpp







target thumb C++


: libstdc++ <= bionic/libstdc++/src/pure_virtual.cpp







prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++



-I system/core/include -I hardware/libhardware/include



-I hardware/libhardware_legacy/include



-I hardware/ril/include



-I dalvik/libnativehelper/include



-I frameworks/base/include



-I frameworks/base/opengl/include



-I external/skia/include



-I out/target/product/generic/obj/include



-I bionic/libc/arch-arm/include



-I bionic/libc/include



-I bionic/libstdc++/include



-I bionic/libc/kernel/common



-I bionic/libc/kernel/arch-arm



-I bionic/libm/include



-I bionic/libm/include/arch/arm



-I bionic/libthread_db/include -I bionic/libstdc++



-I out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates



-c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums



-march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__



-include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork



-DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG



-g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop



-frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer



-fno-strict-aliasing -finline-limit=64 -fno-rtti -MD



-o out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/pure_virtual.o bionic/libstdc++/src/pure_virtual.cpp







target thumb C++


: libstdc++ <= bionic/libstdc++/src/typeinfo.cpp







prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++



-I system/core/include



-I hardware/libhardware/include



-I hardware/libhardware_legacy/include



-I hardware/ril/include



-I dalvik/libnativehelper/include



-I frameworks/base/include



-I frameworks/base/opengl/include



-I external/skia/include



-I out/target/product/generic/obj/include



-I bionic/libc/arch-arm/include



-I bionic/libc/include



-I bionic/libstdc++/include



-I bionic/libc/kernel/common



-I bionic/libc/kernel/arch-arm



-I bionic/libm/include



-I bionic/libm/include/arch/arm



-I bionic/libthread_db/include



-I bionic/libstdc++



-I out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates



-c -fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -march=armv5te -mtune=xscale



-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__



-include system/core/include/arch/linux-arm/AndroidConfig.h -I system/core/include/arch/linux-arm/ -mthumb-interwork



-DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Werror=return-type -DSK_RELEASE -DNDEBUG



-g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop



-frename-registers -DNDEBUG -UDEBUG -fvisibility-inlines-hidden -Werror=return-type -mthumb -Os -fomit-frame-pointer



-fno-strict-aliasing -finline-limit=64 -fno-rtti -MD



-o out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/typeinfo.o bionic/libstdc++/src/typeinfo.cpp







target SharedLib


: libstdc++ (out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/LINKED/libstdc++.so)







prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++



-nostdlib -Wl,-soname,libstdc++.so -Wl,-T,build/core/armelf.xsc -Wl,--gc-sections -Wl,-shared,-Bsymbolic



-Lout/target/product/generic/obj/lib



out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/one_time_construction.o



out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/new.o



out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/pure_virtual.o



out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/src/typeinfo.o



-Wl,--whole-archive -Wl,--no-whole-archive -lc



-o out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/LINKED/libstdc++.so



-Wl,--no-undefined /home/san/Download/android_src/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/../lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a







target Prelink


: libstdc++ (out/target/product/generic/symbols/system/lib/libstdc++.so)







out/host/linux-x86/bin/apriori






--prelinkmap build/core/prelink-linux-arm.map --locals-only



--quiet out/target/product/generic/obj/SHARED_LIBRARIES/libstdc++_intermediates/LINKED/libstdc++.so



--output out/target/product/generic/symbols/system/lib/libstdc++.so







target Strip



: libstdc++ (out/target/product/generic/obj/lib/libstdc++.so)







out/host/linux-x86/bin/soslim






--strip --shady --quiet out/target/product/generic/symbols/system/lib/libstdc++.so



--outfile out/target/product/generic/obj/lib/libstdc++.so







四、Android.mk文件内容










五、Android.mk改写成linux Makefile


六、编译成静态库和动态库的Makefile的主要区别





























原创粉丝点击