Linux環境NDK編譯環境配置說明

一、NDK環境配置
1、下載android-ndk-r20-linux-x86_64.zip
2、inux下解壓android-ndk-r14b-linux-x86_64.zip壓縮包到 /usr/android 目錄下(路徑可自定義)

unzip -d  /usr/android android-ndk-r20-linux-x86_64.zip  

3、配置環境變量,編輯/etc/profile,添加NDK路徑

# vim /etc/profile
export ANDROID_NDK_HOME=/usr/android/android-ndk-r14b
export PATH=$ANDROID_NDK_HOME:$PATH

4、使用source /etc/profile,使配置生效(注意:fish不支持source喲

 #source /etc/profile

二、cmake工具鏈配置
可以使用NDK自帶的工具鏈android.toolchain.cmake(在目錄android-ndk-r16-linux-x86_64\android-ndk-r16\build\cmake下)

三. 編譯
將CMake腳本和Shell腳本放在同一目錄下,賦予ShellScript執行權限,執行./ShellScript命令,生成的.so文件在指定生成目錄下。

附一、CMakelists.txt:

#****************************This is Project Info****************************
#PROJECT(avxallocate)
PROJECT(xccitybus)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
 
#****************************This is Compile Flag****************************
if(HOST_NAME MATCHES linux)
	message( STATUS "==============================linux debug==============================" )        
	SET(CMAKE_C_COMPILER   arm-linux-gnueabihf-gcc)
    SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
elseif((HOST_NAME MATCHES android))
	if(DEBUG)        
		message( STATUS "==============================android debug==============================" )        
		ADD_DEFINITIONS(-g)
		ADD_DEFINITIONS(-D AVX_DEBUG_LEVEL=AVX_DEBUG_DEBUG)
	else(DEBUG)   
		message( STATUS "==============================android release==============================" )         
		ADD_DEFINITIONS(-O2)
		ADD_DEFINITIONS(-D AVX_DEBUG_LEVEL=AVX_DEBUG_INFO)
	endif()
endif()

#ADD_DEFINITIONS("-Wall")
#ADD_DEFINITIONS("-fPIC")
#ADD_DEFINITIONS("-Wl,-lm")
#ADD_DEFINITIONS("-std=gnu++11")
#add_definitions(-Wformat=0)
#ADD_DEFINITIONS(-Wpointer-sign)
#ADD_DEFINITIONS(-Wunused-variable)
#ADD_DEFINITIONS(-Wimplicit-function-declaration)
#ADD_DEFINITIONS(-Wformat=0)
#ADD_DEFINITIONS(-Wunused-label)
ADD_DEFINITIONS ("-w")
#ADD_DEFINITIONS ("-v") #輸出編譯器相關信息
SET(CMAKE_C_FLAGS "-fPIC -Wl,-Bsymbolic -lz -lm -lcurl -D__STDINT_LIMITS -D__STDINT_MACROS -D__ANDROID__ -DANDROID")

#****************************This is Include File/Directories****************************
set(inc_file_path_list
	/src/inc)
foreach(inc_path_list ${inc_file_path_list})
	INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}${inc_path_list})
endforeach(inc_path_list)
 
#****************************This is Source File/Directories****************************
set(src_file_path_list
	/src/src)
foreach(src_path_list ${src_file_path_list})
	aux_source_directory(${PROJECT_BINARY_DIR}${src_path_list} DIR_SRCS)
endforeach(src_path_list)

#****************************This is Library Directories****************************
if(HOST_NAME MATCHES linux)
	LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/src/lib/linux)
elseif((HOST_NAME MATCHES android))
	LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/src/lib/android)
endif()
 
#****************************This is 3Party Library****************************
LINK_LIBRARIES(curl)
LINK_LIBRARIES(sql_exe)
LINK_LIBRARIES(ums)

#****************************This is Output Directory****************************
if(HOST_NAME MATCHES android)
	SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_android)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_android)
	SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_android)
elseif((HOST_NAME MATCHES linux))
	SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_linux)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_linux)
	SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/lib_linux)
endif()
 
#****************************This is Output Library****************************
ADD_LIBRARY(xccitybus SHARED ${DIR_SRCS} )
TARGET_LINK_LIBRARIES(xccitybus)

附二、ShellScript.sh

#!/bin/bash
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake

if [[ $@ =~ "-linux" ]]
then
	echo "----------------------------cmake linux debug----------------------------"
	cmake -DHOST_NAME=linux -DDEBUG=ON

elif [[ $@ =~ "-d" ]] 
then
	echo "----------------------------cmake android debug----------------------------"
	cmake -DHOST_NAME=android -DDEBUG=ON -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake\
      -DANDROID_NDK=$ANDROID_NDK_HOME\
      -DANDROID_ABI="armeabi-v7a"\
	  #-DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9\
	  #-DANDROID_NATIVE_API_LEVEL=21
	  #-DANDROID_STL=gnustl_static
else      
	echo "----------------------------cmake android release----------------------------"
	cmake  -DHOST_NAME=android -DDEBUG=NO -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake\
      -DANDROID_NDK=$ANDROID_NDK_HOME\
      -DANDROID_ABI="armeabi-v7a"    
	  #-DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9\
	  #-DANDROID_NATIVE_API_LEVEL=21
	  #-DANDROID_STL=gnustl_static
fi
	  
make 
 
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章