1. 程式人生 > >MXNET移植到Android,編譯成功

MXNET移植到Android,編譯成功

這兩天在看如何將mxnet編譯成so庫放在Android上使用,發現網上的資料並不多,因此自己寫一下整個過程,給大家借鑑一下。

主要參考的連線是:連結

1、首先需要下載一下NDK,按照上面連結中提到的版本,我們下載的版本是13b的,下載連線:點選開啟連結

然後是生成獨立的工具鏈:

cd yourpath/android-ndk-r13b/build/tools
python make_standalone_toolchain.py --arch arm --api 21 --install-dir yourpath/android-toolchain --stl=libc++  

api21對應的android版本似乎是5.0,應該足夠

2、OpenBLAS安裝

export PATH=$PATH:yourpath/android-toolchain/bin 
git clone https://github.com/xianyi/OpenBLAS.git  
cd OpenBLAS  
make TARGET=ARMV7 HOSTCC=gcc CC=arm-linux-androideabi-gcc NOFORTRAN=1
make PREFIX=yourpath/openblas install

這一塊沒有什麼問題

3、mxnet下載

git clone --recursive https://github.com/dmlc/mxnet.git 

git下來之後,按照上面提到的mxnet的版本v0.10.0或者v0.9.3 但是下面又說了commit hash 是799ed45,所以我們還是checkout到這個commit,發現這應該是應該比較新的版本,2017年7月的提交這個commit。

git checkout 799ed45

因為mxnet裡有一些submodule,checkout到上面這個commit之後,還需要submodule的update

git submodule update

可以看到程式碼庫是有一些區別的,在最新的程式碼中,很多子模組都是放在3rdparty資料夾裡,但是之前是沒有3rdparty資料夾的。

4、準備編譯工具鏈

cd mxnet/amalgamation
export PATH=$PATH:yourpath/android-toolchain/bin
export CC=arm-linux-androideabi-clang  
export CXX=arm-linux-androideabi-clang++  

將Makefile裡的OPENBLAS_ROOT的值修改成自己安裝的位置

修改NNVM的Makefile(位於mxnet/nnvm/amalgamation/Makefile),不要問我為什麼,我也不知道為什麼:

DEFS+=-DMSHADOW_USE_CUDA=0 -DMSHADOW_USE_MKL=0 -DMSHADOW_RABIT_PS=0 -DMSHADOW_DIST_PS=0 -DMSHADOW_USE_SSE=0 -DDMLC_LOG_STACK_TRACE=0 -DMSHADOW_FORCE_STREAM -DMXNET_USE_OPENCV=0 -DMXNET_PREDICT_ONLY=1 -DDISABLE_OPENMP=1

最後在mxnet/amalgamation/amalgamatio.py中修改:

...
print >>f, '''
#define fopen64 std::fopen      #comment<<<<<<line:130
#if defined(__MACH__)
#include <mach/clock.h>
#include <mach/mach.h>
#endif
...

增加一個fopen64的巨集定義

注意使用的python2,python3的話print函式會報錯,如果你正在使用的是python3可以用一個虛擬環境到python2.

5、編譯

make clean
make ANDROID=1
最後終於大功告成,下面就可以試試能不能用啦。

相關推薦

MXNET移植Android編譯成功

這兩天在看如何將mxnet編譯成so庫放在Android上使用,發現網上的資料並不多,因此自己寫一下整個過程,給大家借鑑一下。主要參考的連線是:連結1、首先需要下載一下NDK,按照上面連結中提到的版本,我們下載的版本是13b的,下載連線:點選開啟連結然後是生成獨立的工具鏈:c

android studio 引入系統庫的程式碼全部變紅編譯還能成功的解決辦法

在一次android studio 卡住不動的時候,直接殺死其程序關閉,導致再啟動後,程式碼中引入的系統庫的import 等都變紅,但是編譯還能成功,從別處看到一個處理的方法, 點選File     彈出 選擇第一個,然後androidstudio自動重啟,重啟

分享幾個開源的android專案的原始碼基本上用androidstudio都可以編譯成功

轉自:http://blog.csdn.net/liuqz2009/article/details/53507472 Android開源專案有很多,但是完整的app專案不多,下面是最近我從 jcodecraeer網站 整理的一些開源app專案: 注: jcodecr

windows下編譯最新版ffmpeg3.3-android並通過CMake方式移植Android studio2.3中

windows下編譯最新版ffmpeg3.3 編輯ffmpeg資料夾下面的configure檔案,找到 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' LIB_INSTALL_EXTRA_CMD='$$

cocos2d-x 移植android編譯的一些問題:fatal error: Box2D/Box2D.h: No such file or directory&quot;

cocos2 app nal get dsc err 2dx ros blue 1、fatal error: Box2D/Box2D.h: No such file or directory" 須要加入box2d庫的支持,改動android.mk

NDk編譯opencv for Android並引用在Unity3d遊戲中的一般步驟

ret app sset cpp unity3d 環境 ptr small var 本文使用:Unity3d + opencv + Android Unity3d中可以調用opencv 編譯好的.so 動態庫,在生成Android apk時可以正常運行。 因為An

spark原始碼編譯成功案例 版本修改點

1.spark的下載 開啟網址spark.apache.org,點選download,選擇想要下載的版本,我這裡選擇了最新的2.2.0版本 在choose a package type 中選擇source code,獲取spark2.2.0的下載映象,即可完成下載。 (官網有時候版本切換

Android room定製編譯

android 預設編譯步驟 1.source build/envsetup.sh 2.lunch 3.kheader(mtk不用) 4.make -j8 5.make -j8 2>&1 |tee log.txt     編譯某個資料

解決Android studio編譯大檔案狂佔記憶體、卡爆的問題

本人使用Android studio3.1進行NDK/JNI開發,遇到編譯一個11.4M的巨大.h檔案(儲存一個5萬行的陣列),編譯器預設1024M記憶體,完全不夠用,編譯後狂戰記憶體直至卡爆。 解決方法:調整Android studio記憶體設定 Help -> Edit Custo

android實現檢測app是否有通知許可權沒有就跳轉去設定設定成功返回時並測試發出一條通知訊息

1.判斷是否有通知許可權 2.沒有的話,彈出一個對話方塊,提示使用者是否去設定,使用者點選確定後跳轉到設定頁面 3.手動設定許可權成功後,結果會返回到 onActivityResult方法中,其中返回的請求碼等於傳入的碼時,並且結果碼等於2,編輯正確設定了,此時就可以呼

Android room定製編譯流程

android 預設編譯步驟 1.source build/envsetup.sh 2.lunch 3.kheader(mtk不用) 4.make -j8 5.make -j8 2>&1 |tee log.txt 編譯某個資料夾 cat m

解決Android 原始碼編譯“audio_processing_impl”時報錯“fatal error: list: No such file or directory”問題

我的系統是Linux Mint 17,使用的平臺是Tiny4412,編譯的是友善之臂提供的Android 4.2.2 原始碼。之前編譯沒有問題,今天編譯時,報出這個錯誤,查遍 百度/Google 都沒解決,後來發現是我之前手賤多配置了一個環境變數 NDK_ROOT 導致的問

android studio NDK使用編譯c生成.so實踐記錄

開發環境,android studio 2.1.2,SDK環境和NDK環境 SDK不說了,NDK環境配置網上也有很多,這裡就簡單記錄下: 1 下載NDK並安裝到電腦 D:\android\android-ndk-r11c 2 android studio中右鍵專案進入選單

android studio 編譯問題依賴找不到

最近剛剛開始正式使用android studio 編譯各種問題 不是appcompat_v7找不到,就是build-tools 版本有問題,再有就是你的測試用手機的android 版本也會影響 下面總結一下編譯常見的錯誤 1.appcompat_v7 找不到問題,需要在工程

Linux 4.4核心移植以及Android系統編譯

Android預移植到tiny4412 kernel for tiny4412  前面的文章已經把uboot給弄好了,下面就可以用自己移植的uboot來啟動核心了。對於核心的移植,一開始選擇的是linux4.4的核心,為什麼選4.4,因為開始的時候是想

vlc android編譯及截圖錄製視訊等功能

編譯的環境是ubuntu 12.04,要安裝好java,配置好環境變數,按照http://wiki.videolan.org/AndroidCompile配置好,就可以編譯了。 export JAVA_HOME=/home/sunlit/jdk1.6.0_38/

VS2013 Debug版本編譯成功Release失敗

在Debug模式下編寫程式碼完成後,切換到Release編譯爆出一堆的問題,還好有萬能的百度。研究發現是因為Debug和Release兩個的屬性配置不是通的。也就是你在Debug配置過後還要在Release也要配置。標頭檔案、巨集定義等等。全配置上編譯一下就聽過了。如果還有錯

關於命令列中javac 編譯成功用 java 執行 class 檔案出現 “ 找不到或無法載入主類 ” 的問題

javac編譯成功,用java執行class檔案出現“找不到或無法載入主類”的問題所在 學習android,順便又學習下java. 在這裡推薦Mars老師的視訊,很好用,無論是Java4Android還是Android開發系列視訊教程都很好http://www.marschen.com/ 入門就遇到這樣的問

iOS xmpp一定編譯成功的安裝版本完美解決Module 'libxmlSimu' not found。

xmpp git 地址:  https://github.com/robbiehanson/XMPPFramework 1.下載好XMPP專案,放在本地 2. 新建一個專案 3.按照下面的截圖,把相關的資料夾copy進專案根目錄  注意: 把檔案新增進來。   進入 ta

Eclipse工程檔案拷貝到Android Studio下編譯出現亂碼錯誤

錯誤如截圖所示: 【錯誤原因】:Eclipse中utf-8編碼帶有BOM Header位元組,載入到Android Studio中時,被轉換為utf-16導致該問題出現,如截圖右下角所示UTF-16