Android Toolchain与Bionic Libc

本文介绍了Android使用的交叉编译工具链及官方Toolchain的获取方式。由于Android采用了BionicLibc而非glibc,使得移植其他Toolchain较为困难。文章还提到了Android特有的二进制工具及其替代品。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(源:http://blog.youkuaiyun.com/topembedded/article/details/3492649)

Android所用的Toolchain(即交叉编译工具链)可从下面的网址下载:

http://android.kernel.org/pub/android-toolchain-20081019.tar.bz2。如果下载了完整的Android项目的源代码,则可以在“<your_android>/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目录下找到交叉编译工具,比如Android所用的arm-eabi-gcc-4.2.1。

Android并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。这使得使用或移植其他Toolchain来用于Android要比较麻烦:在Google公布用于Android的官方Toolchain之前,多数的Android爱好者使用的Toolchain是在http://www.codesourcery.com/gnu_toolchains/arm/download.html 下载的一个通用的Toolchain,它用来编译和移植Android 的Linux内核是可行的,因为内核并不需要C库,但是开发Android的应用程序时,直接采用或者移植其他的Toolchain都比较麻烦,其他Toolchain编译的应用程序只能采用静态编译的方式才能运行于Android模拟器中,这显然是实际开发中所不能接受的方式。目前尚没有看到说明成功移植其他交叉编译器来编译Android应用程序的资料。

与glibc相比,Bionic Libc有如下一些特点:

-          采用BSD License,而不是glibc的GPL License;

-          大小只有大约200k,比glibc差不多小一半,且比glibc更快;

-          实现了一个更小、更快的pthread;

-          提供了一些Android所需要的重要函数,如”getprop”, “LOGI”等;

-          不完全支持POSIX标准,比如C++ exceptions,wide chars等;

-          不提供libthread_db 和 libm的实现

 

另外,Android中所用的其他一些二进制工具也比较特殊:

-          加载动态库时使用的是/system/bin/linker而不是常用的/lib/ld.so;

-          prelink工具不是常用的prelink而是apriori,其源代码位于” <your_android>/build/tools/apriori”

-          strip工具也没有采用常用的strip,即“<your_android>/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目录下的arm-eabi-strip,而是位于<your_android>/out/host/linux-x86/bin/的soslim工具。

09:36:22.060 23982-24029 libc com...er710.voipcall A ../src/pjmedia/sdp_neg.c:111: pjmedia_sdp_neg_create_w_local_offer: assertion "(status=pjmedia_sdp_validate(local))==PJ_SUCCESS" failed 09:36:22.061 23982-24029 libc com...er710.voipcall A Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 24029 (SipService), pid 23982 (rer710.voipcall) 09:36:22.106 23982-24152 HwAudioRecordImpl com...er710.voipcall I sendStateChangedIntent, state=1 09:36:22.133 23982-24152 HwAudioRecordImpl com...er710.voipcall I sendStateChangedIntent, state=3 09:36:22.199 24161-24161 DEBUG crash_dump32 A pid: 23982, tid: 24029, name: SipService >>> com.explorer710.voipcall <<< 09:36:22.202 24161-24161 DEBUG crash_dump32 A #02 pc 00243190 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so (pjmedia_sdp_neg_create_w_local_offer+240) ---------------------------- PROCESS STARTED (24164) for package com.explorer710.voipcall ---------------------------- 09:36:22.808 23982-23982 com.explor...istoryView com...er710.voipcall D onDestroy 09:36:22.903 21175-24176 DropBoxBro...stReceiver com.android.secspace E dropbox------>: data_app_native_crash, 2025-06-04 09:36:22 Process: com.explorer710.voipcall PID: 23982 UID: 10172 Flags: 0x3888bf46 Package: com.explorer710.voipcall v15 (1.10) SYSVMTYPE: Art APPVMTYPE: Art Foreground: Yes Lifetime: 19s Build: HUAWEI/SNE-AL00/HWSNE:10/HUAWEISNE-AL00/10.0.0.166C00:user/release-keys *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'HUAWEI/SNE-AL00/HWSNE:10/HUAWEISNE-AL00/10.0.0.166C00:user/release-keys' Revision: '0' ABI: 'arm' Timestamp: 2025-06-04 09:36:22+0800 pid: 23982, tid: 24029, name: SipService >>> com.explorer710.voipcall <<< uid: 10172 signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr -------- Abort message: '../src/pjmedia/sdp_neg.c:111: pjmedia_sdp_neg_create_w_local_offer: assertion "(status=pjmedia_sdp_validate(local))==PJ_SUCCESS" failed' r0 00000000 r1 00005ddd r2 00000006 r3 ba1a8e40 r4 ba1a8e54 r5 ba1a8e38 r6 00005dae r7 0000016b r8 ba1a8e50 r9 ba1a8e40 r10 ba1a8e70 r11 ba1a8e60 ip 00005ddd sp ba1a8e10 lr e66614f7 pc e666150a backtrace: #00 pc 0005450a /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: 579286abe596244378e2f34c6dc9855a) #01 pc 000547a7 /apex/com.android.runtime/lib/bionic/libc.so (__assert2+22) (BuildId: 579286abe596244378e2f34c6dc9855a) #02 pc 00243190 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so (pjmedia_sdp_neg_create_w_local_offer+240) 09:36:22.915 1182-1613 InputDispatcher system_server E channel '5aea552 com.explorer710.voipcall/com.explorer710.voipcall.ui.history.HistoryView (server)' ~ Channel is unrecoverably broken and will be disposed! ---------------------------- PROCESS ENDED (23982) for package com.explorer710.voipcall ---------------------------- 09:36:22.924 1182-1613 InputDispatcher system_server E channel 'd40be8d com.explorer710.voipcall/com.explorer710.voipcall.ui.call.CallView (server)' ~ Channel is unrecoverably broken and will be disposed! 09:36:22.959 1182-4499 WindowManager system_server E win=Window{5aea552 u0 com.explorer710.voipcall/com.explorer710.voipcall.ui.history.HistoryView EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true 09:36:22.979 1986-8343 DollieAdapterService com...i.systemserver E notifyActivityState pkg:com.explorer710.voipcall/com.explorer710.voipcall.ui.history.HistoryView state:20 fg:false mUid:10172 09:36:22.983 21175-24177 DropBoxBro...stReceiver com.android.secspace E dropbox------>: SYSTEM_TOMBSTONE, 2025-06-04 09:36:22 isPrevious: true Build: HUAWEI/SNE-AL00/HWSNE:10/HUAWEISNE-AL00/10.0.0.166C00:user/release-keys Hardware: SNE Revision: 0 Bootloader: unknown Radio: 21C20B388S001C000,21C20B388S001C000 Kernel: Linux version 4.14.116 (android@localhost) (Android (5220042 based on r346389c) clang version 8.0.7 (https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf643d27dbca1bb228957008617) (https://android.googlesource.com/toolchain/llvm 3c393fe7a7e13b0fba4ac75a01aa683d7a5b11cd) (based on LLVM 8.0.7svn)) #1 SMP PREEMPT Wed Sep 14 00:51:17 CST 2022 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'HUAWEI/SNE-AL00/HWSNE:10/HUAWEISNE-AL00/10.0.0.166C00:user/release-keys' Revision: '0' ABI: 'arm' Timestamp: 2025-06-04 09:36:22+0800 pid: 23982, tid: 24029, name: SipService >>> com.explorer710.voipcall <<< uid: 10172 signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr -------- Abort message: '../src/pjmedia/sdp_neg.c:111: pjmedia_sdp_neg_create_w_local_offer: assertion "(status=pjmedia_sdp_validate(local))==PJ_SUCCESS" failed' r0 00000000 r1 00005ddd r2 00000006 r3 ba1a8e40 r4 ba1a8e54 r5 ba1a8e38 r6 00005dae r7 0000016b r8 ba1a8e50 r9 ba1a8e40 r10 ba1a8e70 r11 ba1a8e60 ip 00005ddd sp ba1a8e10 lr e66614f7 pc e666150a backtrace: #00 pc 0005450a /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: 579286abe596244378e2f34c6dc9855a) #01 pc 000547a7 /apex/com.android.runtime/lib/bionic/libc.so (__assert2+22) (BuildId: 579286abe596244378e2f34c6dc9855a) #02 pc 00243190 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so (pjmedia_sdp_neg_create_w_local_offer+240) stack: ba1a8dd0 00000002 ba1a8dd4 e66b817c [anon:.bss] ba1a8dd8 00000000 ba1a8ddc bb013a00 [anon:libc_malloc] ba1a8de0 ba1a91d0 ba1a8de4 b341fa27 /system/bin/app_process32 ba1a8de8 0000000f ba1a8dec 09:36:22.989 21175-24177 DropBoxBro...stReceiver com.android.secspace E cc879308 [anon:libc_malloc] ba1a8df0 e66b817c [anon:.bss] ba1a8df4 fd4d42e9 ba1a8df8 b9eb8d00 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so ba1a8dfc ba1a8e38 ba1a8e00 b9eb8d00 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so ba1a8e04 ba1a8e38 ba1a8e08 00005dae ba1a8e0c fd4d42e9 #00 ba1a8e10 ba1a8e80 ba1a8e14 ba1a8e90 ba1a8e18 ba1a8ea0 ba1a8e1c ba1a8eb0 ba1a8e20 00000002 ba1a8e24 ba1a8a70 ba1a8e28 00000008 ba1a8e2c 00000000 ba1a8e30 00000000 ba1a8e34 00000000 ba1a8e38 ffffffdf ba1a8e3c ffffffff ba1a8e40 00000000 ba1a8e44 00000000 ba1a8e48 ffffffff ba1a8e4c 00005dae ........ ........ #01 ba1a8ef8 b9e87b40 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so ba1a8efc b881e214 [anon:libc_malloc] ba1a8f00 fd4d42e9 ba1a8f04 b9d13194 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so #02 ba1a8f08 00000100 ba1a8f0c b881e49c [anon:libc_malloc] ba1a8f10 b881e214 [anon:libc_malloc] ba1a8f14 b984b800 [anon:libc_malloc] ba1a8f18 fd4d42e9 ba1a8f1c 00035b80 ba1a8f20 ba1a8f44 ba1a8f24 b9c9435c /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so ba1a8f28 ba1a8f8c ba1a8f2c 00000003 ba1a8f30 b881e214 [anon:libc_malloc] ba1a8f34 b984b864 [anon:libc_malloc] ba1a8f38 b9eb8d00 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so ba1a8f3c b881e440 [anon:libc_malloc] ba1a8f40 ba1a8fbc ba1a8f44 b9c5fb58 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so memory near r1: 00005dbc -- ---------------------------- PROCESS STARTED (24187) for package com.explorer710.voipcall ---------------------------- 09:36:23.062 21175-24177 DropBoxBro...stReceiver com.android.secspace E 000-b7efefff --- 0 1000 b7eff000-b7ffcfff rw- 0 fe000 b7ffd000-b7ffefff --- 0 2000 b7fff000-b80fdfff rw- 0 ff000 b80fe000-b80fffff --- 0 2000 b8100000-b81fefff rw- 0 ff000 b81ff000-b81fffff --- 0 1000 b8200000-b83fffff rw- 0 200000 /dev/ashmem/CursorWindow: /data/user/0/com.explorer710.voipcall/databases/history_sipcall.db (deleted) b8400000-b887ffff rw- 0 480000 [anon:libc_malloc] b89f5000-b89f5fff --- 0 1000 b89f6000-b8af4fff rw- 0 ff000 b8af5000-b8af6fff --- 0 2000 b8af7000-b8bf5fff rw- 0 ff000 b8bf6000-b8bf7fff --- 0 2000 b8bf8000-b8cf6fff rw- 0 ff000 b8cf7000-b8cf8fff --- 0 2000 b8cf9000-b8df7fff rw- 0 ff000 b8df8000-b8df9fff --- 0 2000 b8dfa000-b8ef8fff rw- 0 ff000 b8ef9000-b8efafff --- 0 2000 b8efb000-b8ff9fff rw- 0 ff000 b8ffa000-b8ffbfff --- 0 2000 b8ffc000-b90fafff rw- 0 ff000 b90fb000-b90fcfff --- 0 2000 b90fd000-b91fbfff rw- 0 ff000 b91fc000-b91fdfff --- 0 2000 b91fe000-b92fcfff rw- 0 ff000 b92fd000-b92fefff --- 0 2000 b92ff000-b93fdfff rw- 0 ff000 b93fe000-b93fffff --- 0 2000 b9400000-b94fefff rw- 0 ff000 b94ff000-b94fffff --- 0 1000 b9500000-b957ffff rw- 0 80000 [anon:libc_malloc] b95fe000-b95fefff --- 0 1000 b95ff000-b96fdfff rw- 0 ff000 b96fe000-b96fffff --- 0 2000 b9700000-b97fefff rw- 0 ff000 b97ff000-b97fffff --- 0 1000 b9800000-b987ffff rw- 0 80000 [anon:libc_malloc] b98c6000-b98c6fff --- 0 1000 b98c7000-b99c5fff rw- 0 ff000 b99 09:36:23.064 21175-24177 DropBoxBro...stReceiver com.android.secspace E c6000-b99c7fff --- 0 2000 b99c8000-b99c8fff --- 0 1000 b99c9000-b9acefff rw- 0 106000 b9acf000-b9acffff --- 0 1000 b9ad0000-b9eb4fff r-x 0 3e5000 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so b9eb5000-b9eb8fff r-- 3e4000 4000 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so b9eb9000-b9ebffff rw- 3e8000 7000 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/lib/arm/libpjsua2.so b9ec0000-b9ed6fff rw- 0 17000 [anon:.bss] b9f37000-b9f37fff r-- 0 1000 /vendor/lib/libhiion.so (BuildId: 4f1cde0f92b0561033d3e4c8195888) b9f38000-b9f38fff r-x 1000 1000 /vendor/lib/libhiion.so (BuildId: 4f1cde0f92b0561033d3e4c8195888) b9f39000-b9f39fff rw- 2000 1000 /vendor/lib/libhiion.so (BuildId: 4f1cde0f92b0561033d3e4c8195888) b9f3a000-b9f3afff r-- 3000 1000 /vendor/lib/libhiion.so (BuildId: 4f1cde0f92b0561033d3e4c8195888) b9f67000-b9f70fff r-- 0 a000 /vendor/lib/hw/gralloc.kirin710.so (BuildId: 317b7c1dc9be054c6c665023bbbaa0) b9f71000-b9f7bfff r-x a000 b000 /vendor/lib/hw/gralloc.kirin710.so (BuildId: 317b7c1dc9be054c6c665023bbbaa0) b9f7c000-b9f7cfff rw- 15000 1000 /vendor/lib/hw/gralloc.kirin710.so (BuildId: 317b7c1dc9be054c6c665023bbbaa0) b9f7d000-b9f7dfff r-- 16000 1000 /vendor/lib/hw/gralloc.kirin710.so (BuildId: 317b7c1dc9be054c6c665023bbbaa0) b9f7e000-b9f7efff rw- 0 1000 [anon:.bss] b9f9c000-b9f9cfff --- 0 1000 b9f9d000-b9f9dfff --- 0 1000 b9f9e000-ba0a3fff rw- 0 106000 ba0a4000-ba0a5fff --- 0 2000 ba0a6000-ba0a6fff --- 0 1000 ba0a7000-ba1acfff rw- 0 106000 ba1ad000-ba1aefff --- 0 2000 ba1af000-ba1affff --- 0 1000 ba1b0000-ba2adfff rw- 0 fe000 ba2 09:36:23.066 21175-24177 DropBoxBro...stReceiver com.android.secspace E ae000-ba2affff --- 0 2000 ba2b0000-ba2b0fff --- 0 1000 ba2b1000-ba3b6fff rw- 0 106000 ba3b7000-ba3b8fff --- 0 2000 ba3b9000-ba3b9fff --- 0 1000 ba3ba000-ba4b7fff rw- 0 fe000 ba4b8000-ba4b9fff --- 0 2000 ba4ba000-ba4bafff --- 0 1000 ba4bb000-ba5c0fff rw- 0 106000 ba5c1000-ba5c2fff --- 0 2000 ba5c3000-ba5c3fff --- 0 1000 ba5c4000-ba6c9fff rw- 0 106000 ba6ca000-ba6cbfff --- 0 2000 ba6cc000-ba7cafff rw- 0 ff000 ba7cb000-ba7cbfff --- 0 1000 ba7cc000-ba88dfff r-- 80000 c2000 /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/base.apk ba88e000-ba88efff --- 0 1000 ba88f000-ba88ffff --- 0 1000 ba890000-ba98dfff rw- 0 fe000 ba98e000-ba98efff --- 0 1000 ba98f000-ba9fffff r-- 0 71000 [anon:dalvik-classes6.dex extracted in memory from /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/base.apk!classes6.dex] baa00000-bb07ffff rw- 0 680000 [anon:libc_malloc] bb09e000-bb87efff r-- 0 7e1000 [anon:dalvik-classes.dex extracted in memory from /data/app/com.explorer710.voipcall-9ZqavN7Qa9kybWWBEpbh5Q==/base.apk] bb87f000-bb87ffff --- 0 1000 bb880000-bb880fff --- 0 1000 bb881000-bb97efff rw- 0 fe000 bb97f000-bb97ffff --- 0 1000 bb980000-bb9fffff rw- 0 80000 [anon:libc_malloc] bba5e000-bba5efff --- 0 1000 bba5f000-bba5ffff --- 0 1000 bba60000-bbb65fff rw- 0 106000 bbb66000-bbb67fff --- 0 2000 bbb68000-bbb68fff --- 0 1000 bbb69000-bbc66fff rw- 0 fe000 bbc67000-bbc68fff --- 0 2000 bbc69000-bbc69fff --- 0 1000 bbc6a000-bbd67fff rw-
最新发布
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值