日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

發(fā)布時(shí)間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu上通过android toolchain交叉编译Valgrind操作步骤 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? 關(guān)于Valgrind的介紹可以參考:https://blog.csdn.net/fengbingchun/article/details/50196189.

? ? ? 這里介紹下在Ubuntu 16.04上通過(guò)android toolchain如android-ndk-r14b交叉編譯Valgrind源碼的操作步驟:

? ? ? 1.?從 https://valgrind.org/ 下載最新的版本3.17.0,解壓縮,并將終端定位到主目錄;

? ? ? 2.?從官網(wǎng)https://developer.android.com/ndk/downloads/older_releases#ndk-14b-downloads下載android-ndk-r14b并解壓縮;

? ? ? 3.?編寫(xiě)腳本build_android.sh,內(nèi)容如下:此腳本既支持armv7也支持aarch64,在valgrind主目錄下執(zhí)行此腳本

#! /bin/bashif [ $# != 1 ]; thenecho "usage: $0 system_architect"echo "e.g: build armv7: $0 0; build aarch64: $0 1"exit 1
fiif [ $1 != 0 -a $1 != 1 ]; thenecho "input param can only be 0 or 1: \"$0 0\" or \"$0 1\""exit 1
fitoolchain_path=${HOME}/Disk/Soft/android-ndk-r14b
echo "toolchain path: ${toolchain_path}"if [ $1 == 0 ]; thenecho "build android armv7"export AR=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-arexport LD=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ldexport CC=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gccexport CXX=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++export RANLIB=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlibexport STRIP=${toolchain_path}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-stripbash autogen.shCPPFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm" \CFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm" \./configure \--prefix=/ \--host=armv7-unknown-linux \--target=armv7-unknown-linux \--with-tmpdir=/sdcardmake -j4make install DESTDIR=`pwd`/install_armv7
fiif [ $1 == 1 ]; thenecho "build android aarch64"export AR=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-arexport LD=${toolchain_path}/ttoolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ldexport CC=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gccexport CXX=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-g++export RANLIB=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ranlibexport STRIP=${toolchain_path}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-stripbash autogen.shCPPFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm64" \CFLAGS="--sysroot=${toolchain_path}/platforms/android-21/arch-arm64" \./configure \--prefix=/ \--host=aarch64-unknown-linux \--target=aarch64-unknown-linux \--with-tmpdir=/sdcardmake -j4make install DESTDIR=`pwd`/install_aarch64
fi

? ? ? 4.?解決編譯時(shí)的error:oredump-elf.c:149:4:?error:?conflicting?types?for?'Elf32_Nhdr',修改源碼coregrind/m_coredump/coredump-elf.c,將文件中結(jié)構(gòu)體名Elf32_Nhdr調(diào)整為Elf32_Nhdr_,此結(jié)構(gòu)體好像并沒(méi)有用到

? ? ? 5.?執(zhí)行完腳本后,會(huì)在valgrind主目錄下生成install_armv7和install_aarch64目錄,結(jié)構(gòu)如下:bin目錄下存放著valgrind可執(zhí)行文件,libexec/valgrind目錄下存放著所需的動(dòng)態(tài)庫(kù)。注意:(1).valgrind的舊版本動(dòng)態(tài)庫(kù)的存放位置是lib/valgrind目錄;(2).在編譯完armv7或aarch64后,如繼續(xù)編譯另一個(gè)架構(gòu),需先執(zhí)行make clean,再執(zhí)行./build_android.sh 0或./build_android.sh 1

?? ? ? 6.?將install_armv7或install_aarch64拷貝到手機(jī)上,查看valgrind版本,結(jié)果如下:可見(jiàn)valgrind執(zhí)行正確。注意:(1).新版本valgrind的VALGRIND_LIB為./install_aarch64/libexec/valgrind,在舊版本中為./install_aarch64/lib/valgrind;(2).當(dāng)測(cè)試的可執(zhí)行文件依賴(lài)其它動(dòng)態(tài)庫(kù)時(shí),需要用LD_LIBRARY_PATH指定依賴(lài)動(dòng)態(tài)庫(kù)所在的目錄;(3).如在執(zhí)行過(guò)程中,遇到類(lèi)似以下錯(cuò)誤時(shí)"valgrind:?Can't?create?client?cmdline?file?in?/data/local/tmp/valgrind_proc_xxxx_cmdline_yyyyyyyy",在原有命令基礎(chǔ)上,添加TMPDIR=.?即可,如TMPDIR=.?VALGRIND_LIB=./install_aarch64/libexec/valgrind?LD_LIBRARY_PATH=target/android-aarch64/ ./install_aarch64/bin/valgrind --leak-check=full --log-file=log.txt ./build/CppBaseTest

?

?

總結(jié)

以上是生活随笔為你收集整理的Ubuntu上通过android toolchain交叉编译Valgrind操作步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。