c移植android
Ⅰ 如何將opencv的C++源程序移植到Android 平台上
opencv本身是跨平台的,有各個平台,包括android/ios的版本。
所以基於標准OpenCV介面開發的代碼,少量修改就可以移植到其他平台。
首先下載一個android版本的opencv
然後基於NDK編譯它裡面有一些demo,是調用OpenCV的標准C++介面實現的,按照你的需求查看對應的demo,按照這些demo的方式,把你的c++代碼移植過來,理論上來說此部分只需要很少改動。
Ⅱ 如何在Android系統上運行c語言的程序
本人使用mini6410開發了一個sqlite資料庫的程序,在mini6410的linux系統下已經能夠成功運行了。因為Android使用的也是linux內核,所以我想當然的認為按照同樣的方法將程序移植到mini6410的android系統中也可以成功運行,但是當我運行程序的時候卻提示我不能找到可執行文件(xlisten-arm是交叉編譯出來的可執行文件): / # ./xlisten-arm /system/bin/sh: ./xlisten-arm: not found 1.探索: 在網上搜索起初認為可能是庫文件的不全導致的,於是在查看可執行文件xlisten-arm所需要的動態鏈接庫: 執行語句: # arm-linux-readelf -a ./xlisten-arm grep "Shared" 0x00000001 (NEEDED) Shared library: [libsqlite3.so.0] 0x00000001 (NEEDED) Shared library: [libm.so.6] 0x00000001 (NEEDED) Shared library: [libcrypt.so.1] 0x00000001 (NEEDED) Shared library: [libpthread.so.0] 0x00000001 (NEEDED) Shared library: [libdl.so.2] 0x00000001 (NEEDED) Shared library: [libc.so.6] 知道所需的動態鏈接庫後,到android文件系統中去照著寫庫文件,在目錄/system/lib 中,果然缺少相應的庫文件,於是認為找到了我問題的根源所在,在復制相應庫文件的時候為了保留原來的屬性,還特意用了 #cp -a filename dir 誰知將這些庫都添加進去以後,仍然無濟於事! 看來不僅僅事庫文件缺失的問題了,而且一般來說,如果真的是因為缺少庫文件而導致的問題,終端會提示我們鏈接某庫文件時沒有找到該庫文件。 2.正確的解決方法: 將程序編譯的時候選擇靜態編譯,即使用選項 -static 我是對Makefile文件中的CFLAG變數進行修改 CFLAGS = -Wall 改為; CFLAGS = -Wall -static 然而此時又出現問題了: undefined reference to `pthread_mutex_*' undefined reference to `dl*' 提示沒有定義這些函數,於是在包含的庫文件中添加了這兩個庫文件 在Makefile中,修改LIBS變數; LIBS = -lsqlite3 -lm -lcrypt 改為: LIBS = -lsqlite3 -lm -lcrypt -lpthread -ldl 然後進行交叉編譯,成功了! 編譯出來的可執行文件比較大,因為事靜態編譯的,我的有2M多, 拷貝到開發板的andriod系統中, 修改許可權: #chmod 777 xlisten-arm 執行: / # ./xlisten-arm OK!能夠正確的執行了!
Ⅲ 我原先用C++寫的演算法,現在想移植到Android機中,求助
android程序基本是java寫的,但為了能讓C/C++代碼運行於android上彌補JAVA運行效率低的缺點,android提供了 NDK,可以把C/C++的代碼移植到 android上。
Ⅳ 如何在Android系統上運行C語言的程序
本人使用mini6410開發了一個sqlite資料庫的程序,在mini6410的linux系統下已經能夠成功運行了。因為Android使用的也是linux內核,所以我想當然的認為按照同樣的方法將程序移植到mini6410的android系統中也可以成功運行,但是當我運行程序的時候卻提示我不能找到可執行文件(xlisten-arm是交叉編譯出來的可執行文件):
/ # ./xlisten-arm
/system/bin/sh: ./xlisten-arm: not found
1.探索:
在網上搜索起初認為可能是庫文件的不全導致的,於是在查看可執行文件xlisten-arm所需要的動態鏈接庫:
執行語句:
# arm-linux-readelf -a ./xlisten-arm | grep "Shared"
0x00000001 (NEEDED) Shared library: [libsqlite3.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]
知道所需的動態鏈接庫後,到android文件系統中去照著寫庫文件,在目錄/system/lib 中,果然缺少相應的庫文件,於是認為找到了我問題的根源所在,在復制相應庫文件的時候為了保留原來的屬性,還特意用了
#cp -a filename dir
誰知將這些庫都添加進去以後,仍然無濟於事!
看來不僅僅事庫文件缺失的問題了,而且一般來說,如果真的是因為缺少庫文件而導致的問題,終端會提示我們鏈接某庫文件時沒有找到該庫文件。
2.正確的解決方法:
將程序編譯的時候選擇靜態編譯,即使用選項 -static
我是對Makefile文件中的CFLAG變數進行修改
CFLAGS = -Wall
改為;
CFLAGS = -Wall -static
然而此時又出現問題了:
undefined reference to `pthread_mutex_*'
undefined reference to `dl*'
提示沒有定義這些函數,於是在包含的庫文件中添加了這兩個庫文件
在Makefile中,修改LIBS變數;
LIBS = -lsqlite3 -lm -lcrypt
改為:
LIBS = -lsqlite3 -lm -lcrypt -lpthread -ldl
然後進行交叉編譯,成功了!
編譯出來的可執行文件比較大,因為事靜態編譯的,我的有2M多,
拷貝到開發板的andriod系統中,
修改許可權:
#chmod 777 xlisten-arm
執行:
/ # ./xlisten-arm
OK!能夠正確的執行了!
Ⅳ 如何把一個C++的源程序移植到Android上
用NDK編譯成so,並寫jni介面以便給java調用。
如果用NDK編譯?
1、到android開發網下載NDK開發包,裡面有document
2、把opencv用NDK的方法編譯可以通過以下的思路:
(1)第一種方法:看看opencv官方的編譯文檔,是否已經支持NDK的編譯腳本或選項,如果有,直接按官方說明進行
(2)第二種方法:使用交叉編譯的方法,即NDK文檔里介紹的使用make-standalone-toolchain.sh的方法,這種方法很適合使用autoconf(即./configure)的項目
(3)第三種方法:根據NDK文檔所說,自己手工寫Android.mk和Application.mk,適合小型項目。
Ⅵ C語言 編寫的程序怎麼移植到手機上
android系統?還是ios?
android開發是用的java,如果想使用c,有兩種方式,一種將c語言編譯成.so文件,在android程序中載入,或者可以使用JNI直接調用c函數。
Ⅶ 自己用C語言編了個程序能放入安卓手機使用么
兩種方法:
1.
JNI。在安卓上層通過JNI調用底層c的程序。
2.
把c語言改成JAVA。
你的程序是不能直接放在手機裡面運行的,不過你可以把你的c文件放到手機里,用C4droid這個安卓程序運行。
Ⅷ 標准C程序如何移植到android平台需要什麼編譯參數,我用的是arm-eabi-gcc工具鏈
首先 你編譯的程序 用cat命令看 目錄應該是/lib/libc.so.6 而Android 是 /system/lib/libc.so
本來已經有C庫了 但是 我這里沒有用~ 你可以在 你的PC安裝機子上找到 交叉編譯arm-eabi-gcc或 arm-linux-gcc安裝目錄下的arm/4.3.2/..../libc/lib/libc2.8.so好像 是這個 有一個是libc.so.6 這個是一個連接 不是文件 查看屬性 看下連接的文件應該是 那個libc2.8.so (放心它是arm版的)拷貝這個文件到 安卓/system/lib/去 然後
用RE文件 為它添加一個 連接 /system/lib/libc.so.6 就可以了
這樣 標准庫是被移植去了 但是 你的應用程序 有可能使用的是 /lib/libc.so.6 不是 /system/lib/libc.so.6
先測試不行的話 就把 /system/lib 連接為/lib
Ⅸ linux posix標准C程序,移植到android的時候,怎麼解決兩個平台庫兼容問題
這個很不容易,不是直接重新編譯就行。
許多的代碼也都必須重新編寫。
奉勸您別花那麽多的時間。如果您真的想試驗一下,那麽可以看一下這一篇:
http://www.hacker.com.cn/show-13-213-1.html
Ⅹ 如何將自己編寫的C和OPENCV程序在android手機上運行
可以直接在手機上運行。android專業開發肯定都是直接用真機運行項目的。
運行方式:
1. 手機打開 USB調式模式(不同的手機操作可能打開方式不一樣)
2. 將手機連接到電腦,
3. 電腦上安裝手機USB驅動程序
4. 運行android 應用
點擊工程 run as android application後,系統就會查找已經連接到電腦的設備,選擇已經連接的設備即可運行在手機上了。