求助linux 安装makeNDK 问题 找不到make怎么回事

博客分类:
网上也有一些对NDK的介绍,不过都是很简单的把sample里面的例子讲解一下,并不深入,我这里把我的所得分享一下。我下载的是Android Native Developer Kit (NDK) R4版本,当前的最新版。
下载地址如下:
我下面讲的都是以linux环境为准,因为我的系统是linux的。windows下可以弄个Cygwin,模拟linux环境,网上有很多介绍。
首先进入ndk目录,有个README文件,里面提到了API的文档在docs/STABLE-APIS.TXT里面,如何安装NDK,参考docs/INSTALL.TXT,还有如何使用NDK,参考docs/HOWTO.TXT。建议这些文档都看一遍,有个大概了解。
INSTALL.TXT里面讲的是如何安装,安装NDK,就需要一个可以make环境,linux自带了,所以不用关心。还有一点,以前的版本都需要运行build/host-setup.sh来进行初始化,这个版本把它删除了,这样更方便。
然后就是配置环境变量。
在~/.bashrc文件里面,添加
NDK_ROOT=~/android-ndk-r4b #后面的路径是NDK所在的目录,根据自己的目录修改
export NDK_ROOT
NDK_ROOT=~/android-ndk-r4b #后面的路径是NDK所在的目录,根据自己的目录修改
export NDK_ROOT
然后保存,重新打开bash。
先拿sample试刀吧,刚开始什么都不知道,只有运行出一个例子,才能增加信心。
编译的两种方法:
1.进入要目标工程目录,比如$NDK_ROOT/samples/hello-jni,然后执行$NDK_ROOT/ndk-build
2.在任何地方,执行$NDK_ROOT/ndk-build -C $NDK_ROOT/samples/hello-jni.
如果成功的话,会生成obj和libs两个目录。
选择一种方法,编译这个例子。然后打开eclipse,把hello-jni这个工程导入,运行,ok,就能看到效果了。
docs下的STABLE-APIS.TXT里面讲了系统API的用法。我以1.5为例。进入$NDK_ROOT/build/platforms/android-3/arch-arm/usr/include,里面有很多.h文件,这些都是可以在NDK里面调用的,除了linux和asm目录下的。
一般来说,主要用到的是jni.h,里面提供了很多对类和对象的操作。
另外,1.5提供了log的API,在android/log.h里面,使用的时候,在c文件中#include &android/log.h&,然后在Android.mk里面加上LOCAL_LDLIBS := -llog,就可以了。
1.6到2.01提供了openGL ES 1.x的API,2.1提供了openGL ES 2.0的API,2.2提供了graphics的处理接口。使用方法同log。
给出两个点的坐标,求它们的距离。
首先,创建一个Point对象,
public class Point {
public class Point {
然后在c文件中定义一个函数
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b){}
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b){}
返回值是float,在jni中定义的是jfloat。
函数名规则: Java开头,接着是包名的每一段,然后是类名,最后是Java中调用的方法名,中间都用下划线隔开。第一个参数JNIEnv* env和第二个参数jobject thiz都是必须的,后面的才是Java中传递进来的参数。这里是两个Point对象。
首先确定要做的步骤:
1.找到这个Point类
2.找到类中的域x和y的域id
3.根据ID取出x和y的值
4.计算结果并返回
那么代码如下:
#include &jni.h&
#include &math.h&
#include &android/log.h&
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b)
jclass point_class = (*env)-&FindClass(env, "chroya/demo/ndk/Point");
if(point_class == NULL) {
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "class Point not found");
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "found class Point");
jfieldID field_x = (*env)-&GetFieldID(env, point_class, "x", "F");
jfieldID field_y = (*env)-&GetFieldID(env, point_class, "y", "F");
jfloat ax = (*env)-&GetFloatField(env, a, field_x);
jfloat ay = (*env)-&GetFloatField(env, a, field_y);
jfloat bx = (*env)-&GetFloatField(env, b, field_x);
jfloat by = (*env)-&GetFloatField(env, b, field_y);
return sqrtf(powf(bx-ax, 2) + powf(by-ay, 2));
#include &jni.h&
#include &math.h&
#include &android/log.h&
jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b)
jclass point_class = (*env)-&FindClass(env, "chroya/demo/ndk/Point");
if(point_class == NULL) {
//printf("class not found");
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "class Point not found");
__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "found class Point");
jfieldID field_x = (*env)-&GetFieldID(env, point_class, "x", "F");
jfieldID field_y = (*env)-&GetFieldID(env, point_class, "y", "F");
jfloat ax = (*env)-&GetFloatField(env, a, field_x);
jfloat ay = (*env)-&GetFloatField(env, a, field_y);
jfloat bx = (*env)-&GetFloatField(env, b, field_x);
jfloat by = (*env)-&GetFloatField(env, b, field_y);
return sqrtf(powf(bx-ax, 2) + powf(by-ay, 2));
然后在Java里面调用:
public class Main extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(getApplicationContext());
Point a = new Point();
Point b = new Point();
float d = distance(a,b);
tv.setText("distance(a,b):"+d);
setContentView(tv);
public native float distance(Point a, Point b);
System.loadLibrary("demo");
public class Main extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(getApplicationContext());
Point a = new Point();
Point b = new Point();
float d = distance(a,b);
tv.setText("distance(a,b):"+d);
setContentView(tv);
public native float distance(Point a, Point b);
System.loadLibrary("demo");
运行,得到结果distance(a,b):2.828427
源码参见附件 。
(109.3 KB)
下载次数: 21
熊滔爱孟涛静
浏览: 80562 次
来自: 深圳
楼主,你能否写一个 int类型的一维数组的结构体?
刚好找第二种,其他地方全是第一种。
我们是可以把不同分辨率的图片放到不同的图片文件夹中去,问题是: ...
学习了,Mark& 相关文章 &
使用NDK编译碰到的问题
make: *** No rule to make target`/sources//android/cpufeatures/cpu-features.c',needed by `obj/local/armeabi/objs-debug/cpufeatures/cpu-features.o'. 删除输出文件夹“obj” 重新编译即可。 或者ndk-bulid clean 这个错误引发的运行是用不同版本的NDK编译过同一个工程 产生冲突
Opencv 4 Android 问题汇总:
1,No rule to make target needed by *.so问题的解决 问题: Android NDK:
This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK:
or LOCAL_SHARED_LIBRARIES instead to list the library dependencies
Android中JNI开发(一)开发环境
Android中JNI开发环境: 大概分4个步骤:
1. 安装Cygwin,在线安装,安装过程略(注意:安装时除了常用的工具外不要忘了安装make和gcc);
2. 下载NDK,下载完后直接解压即可;
3. 配置环境--&这个很简单。
找到Cygwin目录下,打开home/用户/.bash_profile文件,添加"NDK=/cygdrive/&你的盘符&/&android ndk 目录&", 例如:
NDK=/cygdrive/e
No rule to make target out/target/common/obj/JAVA_LIBRARIES/librilproto-java
,但也与此类似) 源码相关的.mk文件没有参与编译。 如我的目录:android\hardware\ril\mock-ril 另,如果是单独的apk 则如 (此方法为网络转载) http://blog.csdn.net/victoryckl/article/details/7857962
在android4.0源码中,mm编译apk时出现下面的错误: make: *** No rule to make target
`out/target/common/obj/JAVA_LIBRARIES
#错误提示:make: *** No rule to make target
include $(CLEAR_VARS)
LOCAL_MODULE
#编译库的名字
LOCAL_SRC_FILES := hello.c
#编译的文件
include $(BUILD_SHARED_LIBRARY)
注意: (**env).NewStringUTF与 (*env)-&NewStringUTF表示是同一个操作
#错误提示:make: *** No rule to make target
include $(CLEAR_VARS)
LOCAL_MODULE
#编译库的名字
LOCAL_SRC_FILES := hello.c
#编译的文件
include $(BUILD_SHARED_LIBRARY)
注意: (**env).NewStringUTF与 (*env)-&NewStringUTF表示是同一个操作
Android NDK 编程 之2
使用Android NDK编译hello-jni工程
在Windows中的安装Android NDK开发环境
“Window-&Preference”,在左侧导航栏选择“Android-&NDK”,输入你的NDK路径。 第四步 导入即编译NDK例程
然后你可以导入NDK中的例程。导入过程请参考“ 如何导入android sdk 的 sample中的源码”。
导入后,你编译通过,但执行即报运行时错误,比如执行例程 HelloNeon将在执行 System.loadLibrary("helloneon"); 时报告以下错误
E/AndroidRuntime(745): Caused
使用AndroidStudio编译NDK的方法及错误解决方案
参考资料: 【android ndk】macos环境下Android Studio中利用gradle编译jni模块及配置: 链接地址 ANDROID STUDIO, GRADLE AND NDK INTEGRATION: 链接地址 Gradle Plugin User Guide: 链接地址 New Build System: 链接地址 实践证明: 0.4.2只有在gradle1.10版本下创建只包含AndroidLibrary模块的工程时才能正常编译,gradle1.9版本不可以
搭建Android NDK环境
)   NDK=/cygdrive/&你的盘符&/&android ndk 目录& export NDK,
  如我的为 NDK=/cygdrive/C/Android/android-ndk-r7 export NDK   注:"NDK"这个名字随便起,以后经常用别太长 ② 验证 重启cygwin,输入:cd $NDK 可进入ndk对应目录说明设置OK。 5 编译工程生成.so文件 方式一: 在cygwin命令行下编译,编译过程如下图所示,三步骤 ① 进入android项目工作目录:cd $NDK
Cocos2D-HTML5 MoonWarriors Android Dev (wwashington) -- Android 编译指南
: moonwarriors_shared &= main.cpp "Compile++ thumb : moonwarriors_shared &= AppDelegate.cpp ...... 5.B)通过Cygwin编译,前面编译好了Cocos2D-X库文件,直接打包。运行、运行方式、Android。 这时候可能会出现一个错误,“No rule to make target: CCConfiguration.cpp”。这是由于 文件权限或者编译时间太久引起的。通常删掉旧的包重建就好。如果不行
Cocos2D-HTML5 JSBinding Android编译指南
Eclipse 和 ADT、CDT、Android SDK、Android NDK,建议大家使用 UDE 开发工具。它是中国移动提供的跨平台开发、调试、编译工具,即将支持游戏开发。 Cygwin是Redhat公司提供的一个在Win32下的Linux POSIX仿真环境,建议大家安装。 ADT
,/tools/sdk/eclipse-adt.html CDT
,http://www.eclipse.org/cdt/ SDK
"make: *** [out/target/common/obj/PACKAGING/checkapi-current-timestamp] 错误 38" 问题解决
编译Android 源码的时候,出现"make: *** [out/target/common/obj/PACKAGING/checkapi-current-timestamp] 错误 38"信息,解决方法如下: make update-api make
Android NDK使用常见错误
means. 按照上述步骤,我们说明在每一步中可能存在的错误【第一步,我们就不在这里详细说了,网上有很多不错的文章】。 常见错误说明: 1、make:*** No rule specified and no make file found. Stop. 错误的原因估计是(cat : Linux命令,显示文件的内容):工程名与Aplication.mk中的APP_MOUDLES不一致。 2、make: *** No rule to make target
“XXXXXX”, needed
Android NDK使用常见错误
means. 按照上述步骤,我们说明在每一步中可能存在的错误【第一步,我们就不在这里详细说了,网上有很多不错的文章】。 常见错误说明: 1、make:*** No rule specified and no make file found. Stop. 错误的原因估计是(cat : Linux命令,显示文件的内容):工程名与Aplication.mk中的APP_MOUDLES不一致。 2、make: *** No rule to make target
“XXXXXX”, needed
Android2.3 编译出错:No rule to make InterpAsm-x86.S
/libmhalmp4venc_rc.a'. Stop. 我们在MM单个(Android源码)应用时会出现上面一个错误日志。 是脚本编译选项有问题,脚本有时候会出错,手动选择正确目标路径就ok了 解决办法: 在/home/ryan/Android2.2/alps/out/target/product 找到我们的工程名,工程名就是我们编译时出现的 project=aaa 我们复制这个名字“aaa” 在当前要MM的应用下面输入命令: export TARGET_PRODUCT=aaa
Android2.3 编译出错:No rule to make InterpAsm-x86.S
单个(Android源码)应用时会出现上面一个错误日志。 是脚本编译选项有问题,脚本有时候会出错,手动选择正确目标路径就ok了 解决办法: 在/home/ryan/Android2.2/alps/out/target/product 找到我们的工程名,工程名就是我们编译时出现的 project=aaa 我们复制这个名字“aaa” 在当前要MM的应用下面输入命令: export TARGET_PRODUCT=aaa
Android 编译
Android 编译
Linux环境下NDK JNI开发实例
必须的,否则make无法编译
6,进入$NDKROOT目录,记住一定在在这个目录下执行
make APP=HelloNDK
在apps/HelloNDK/project/libs/armeabi下生成libipodport_data.so
重新编译 make -B APP=HelloNDK
三,用第三方的so,可以直接的使用
方法:只是需要使用第三方用NDK开发的库,那么
-----------------------------------------------------------------------
20:15:14 使用r9d编译遇到的问题: make.exe: *** No rule to make target `E:/dev/sdk/android-ndk-r10/sources/android /cpufeatures/cpu-features.c', needed by `obj/local/armeabi/objs-debug/cpufeature s/cpu-features.o
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";NDK交叉编译之自定义工具链 - 简书
NDK交叉编译之自定义工具链
本机OS: Ubuntu 14.04 x64
首先上官方文档可以自定义工具链进行交叉编译
1.对不同的指令集APP_ABI设置
Architecture
Toolchain name
arm-linux-androideabi-&gcc-version&
x86-&gcc-version&
MIPS-based
mipsel-linux-android-&gcc-version&
ARM64-based
aarch64-linux-android-&gcc-version&
X86-64-based
x86_64-&gcc-version&
MIPS64-based
mips64el-linux-android--&gcc-version&
2.工具链和相应的值,使用--arch
mips64 compiler
--arch=mips64
mips GCC 4.8 compiler
--arch=mips
x86 GCC 4.8 compiler
--arch=x86
x86_64 GCC 4.8 compiler
--arch=x86_64
mips GCC 4.8 compiler
--arch=mips
3.工具链和相应的值,使用--toolchain
--toolchain=arm-linux-androideabi-4.8
--toolchain=arm-linux-androideabi-4.9
--toolchain=arm-linux-android-clang3.5
--toolchain=arm-linux-android-clang3.6
--toolchain=x86-linux-android-4.8
--toolchain=x86-linux-android-4.9
--toolchain=x86-linux-android-clang3.5
--toolchain=x86-linux-android-clang3.6
--toolchain=mips-linux-android-4.8
--toolchain=mips-linux-android-4.9
--toolchain=mips-linux-android-clang3.5
--toolchain=mips-linux-android-clang3.6
--toolchain=aarch64-linux-android-4.9
--toolchain=aarch64-linux-android-clang3.5
--toolchain=aarch64-linux-android-clang3.6
--toolchain=x86_64-linux-android-4.9
--toolchain=x86_64-linux-android-clang3.5
--toolchain=x86_64-linux-android-clang3.6
--toolchain=mips64el-linux-android-4.9
--toolchain=mips64el-linux-android-clang3.5
--toolchain=mips64el-linux-android-clang3.6
主机工具链和相应的值,使用-system
Host toolchain
64-bit Linux
-system=linux-x86_64
64-bit MacOSX
-system=darwin-x86_64
64-bit Windows
-system=windows-x86_64
#NDK_HOME为安装路径
export NDK_HOME=/workspace/android-ndk-r10e
$NDK_HOME/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=$HOME/android-toolchain --toolchain=arm-linux-androideabi-4.9
上面演示的仅仅是单一的arm工具链可以根据自己的需要独立配置不过相应的arch和对应的toolchain要对应
可以写个Shell脚本处理make_toolchain.sh在开头配置好相应的路径,和platform即可
export NDK_HOME=/workspace/android-ndk-r10e
platform=android-21
shmake=$NDK_HOME/build/tools/make-standalone-toolchain.sh
toolchains=(
'arm-linux-androideabi-4.9'
'aarch64-linux-android-4.9'
'x86_64-4.9'
'mipsel-linux-android-4.9'
'mips64el-linux-android-4.9'
echo $NDK_HOME
num=${#archs[@]}
for ((i=0;i&$i++))
sh $shmake --arch=${archs[i]} --platform=$platform --install-dir=$HOME/android-toolchain/${archs[i]} --toolchain=${toolchains[i]}
sh make_toolchain.sh
交叉编译的工具链配置完成,方便后续进行交叉编译
不以物喜,不以己悲!linux环境下NDK配置与开发_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
linux环境下NDK配置与开发
&&linux环境下NDK配置与开发
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 make linux 的文章

 

随机推荐