github地址:https://github.com/albuer/heapsnap
github的源码,缺少相关库,所以不能编译出可执行文件,及想要的lib,
我补充了缺少的库,可以正常编译出可执行文件,及lib。
HeapSnap的使用,在https://github.com/albuer/heapsnap地址有比较详细的说明。
这里只是记录下,添加编译依赖库,可以正常编译出在手机上使用的可执行文件,及lib。
这是我本地调试过,上传的一个可以在android上正常编译的资源路径:https://github.com/whcx/HeapSnapAndroid.git
编译依赖库存放位置:app\src\main\jniLibs\arm64-v8a只提供了针对arm64架构的。
cmakelist.txt中
set(libs ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${libs}")
设置了查找依赖库的路径。
如下语句定义了编译完成后,可执行文件及lib存放的路径。
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib)
如下是完整的cmakelist,跟原github项目对比,主要是添加了android的编译脚本。
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_VERBOSE_MAKEFILE on)
message("heap snapshot compile begin.....")
message(STATUS ${CMAKE_SOURCE_DIR})
message(STATUS ${PROJECT_SOURCE_DIR})
#add_definitions(-Wno-error)
# -DPLATFORM_SDK_VERSION
set(CMAKE_C_FLAGS "$ENV{CFLAGS} -Wno-error")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../lib)
set(libs ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${libs}")
include_directories(${CMAKE_SOURCE_DIR}/heapsnap/include)
#add_library(c_malloc_debug
# SHARED
# IMPORTED)
#set_target_properties(c_malloc_debug
# PROPERTIES IMPORTED_LOCATION
# ${CMAKE_SOURCE_DIR}/heapsnap/${ANDROID_ABI}/libc_malloc_debug.so)
set(SRCS
${CMAKE_SOURCE_DIR}/heapsnap/inject.c
${CMAKE_SOURCE_DIR}/heapsnap/process_util.c
${CMAKE_SOURCE_DIR}/heapsnap/ptrace_util.c)
add_executable(heap-snap ${SRCS})
add_executable(leak-test ${CMAKE_SOURCE_DIR}/heapsnap/leak_test.c)
#native-lib.cpp
add_library(
heapsnap
SHARED
${CMAKE_SOURCE_DIR}/heapsnap/heapsnap.cpp)
find_library(
log-lib
log )
target_link_libraries(
heapsnap
c_malloc_debug
dl
${log-lib})