当前位置: 首页 > news >正文

NDK编译可执行文件

为什么80%的码农都做不了架构师?>>>   hot3.png

对于 C 应用程序的编译链接,自己编写的 makefile 是件比较困难的事情,我们可以利用 NDK 提供的 build 工具,实现我们的目标。

比如我们以hello.c工程:

#include <stdio.h>
    int main()
    {
    printf("Hello World!\n");
       return 0;
    }

编写Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= helloa
LOCAL_SRC_FILES := hello.c
include $(BUILD_EXECUTABLE)

在当前目录下打开终端运行:ndk-build,出现如下错误:

[D:\ndk\android-ndk-r9d\sources\hellotest]$ ndk-build
Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
D:\ndk\android-ndk-r9d\build/core/build-local.mk:148: *** Android NDK: Aborting    .  Stop.

解决办法有两种:

1)在该路径下创建一个空白的AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?>

<manifest/>

再次执行ndk-build,可顺利编译出可执行文件,adb push到android平台上执行:

[D:\ndk\android-ndk-r9d\sources\hellotest]$ ndk-build
[armeabi] Compile thumb  : helloa <= hello.c
[armeabi] Executable     : helloa
[armeabi] Install        : helloa => libs/armeabi/helloa

2)根据提示,可进行NDK_PROJECT_PATH赋值指定:

ndk-build -B NDK_PROJECT_PATH=.

再次执行ndk-build,同样可顺利编译出可执行文件,adb push到android平台上执行:

[D:\ndk\android-ndk-r9d\sources\hellotest]$ ndk-build
[armeabi] Compile thumb  : helloa <= hello.c
[armeabi] Executable     : helloa
[armeabi] Install        : helloa => libs/armeabi/helloa


转载于:https://my.oschina.net/896698/blog/499584

相关文章:

  • TCP协议学习总结(上)
  • cocos2dx 屏幕触摸
  • js 属性getset
  • PHP之curl put方式提交与接受数据
  • [Android Pro] AndroidX重构和映射
  • Eclipse SVN插件检出Src下面的包变成了文件夹解决
  • 科学家研发出3D打印韧带 使用电力来制造纤维
  • Loadrunner 关于参数赋值取值的操作
  • 核心组件
  • EF 常见语句以及sql语句简单 后续继续添加
  • Javascript -- 精通Math对象
  • 基于TLS(线程局部存储)的高效timelog实现
  • 当一个java程序员到底有多难
  • [纯干货] MySQL索引背后的数据结构及算法原理
  • traffic and backfill
  • angular2 简述
  • Laravel Mix运行时关于es2015报错解决方案
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring核心 Bean的高级装配
  • Theano - 导数
  • Vim 折腾记
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端js -- this指向总结。
  • 设计模式(12)迭代器模式(讲解+应用)
  • 算法---两个栈实现一个队列
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​什么是bug?bug的源头在哪里?
  • #if和#ifdef区别
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (8)STL算法之替换
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)计算机毕业设计高校学生选课系统
  • (过滤器)Filter和(监听器)listener
  • (五)c52学习之旅-静态数码管
  • (一)VirtualBox安装增强功能
  • (一)插入排序
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • **PHP二维数组遍历时同时赋值
  • .NET/C# 使用反射注册事件
  • .NET中 MVC 工厂模式浅析
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @ConditionalOnProperty注解使用说明
  • @Validated和@Valid校验参数区别
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [C# WPF] 如何给控件添加边框(Border)?
  • [Codeforces] probabilities (R1600) Part.1
  • [Django 0-1] Core.Checks 模块
  • [ES-5.6.12] x-pack ssl
  • [ffmpeg] x264 配置参数解析