makefile交叉编译(如何制定android交叉编译工具链)

本文目录
- 如何制定android交叉编译工具链
- 请问什么是交叉编译跟本地编译有什么区别求大神帮助
- 请问什么是交叉编译跟本地编译有什么区别
- makefile 交叉编译怎么引用静态库
- makefile中CROSS_COMPILE = $(CONFIG_CROSS_COMPILE:“%“=%)什么意思
- 源代码没有configure文件只有Makefile文件怎么交叉编译 或者丛Makefile文件提取出来configure文件
- 现有两个源文件test1.c和test2.c,试给这两个源文件编写Makefile文件,要求使用交叉编辑工具arm-linux-gcc
- 交叉编译Makefile
如何制定android交叉编译工具链
经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 PC机的编译工具,可以让你在PC机上编译出目标平台(例如ARM)可识别的二进制文件。Android平台也提供了这样的交叉编译工具链,就放在Android的NDK开发包的toolchains目录下,因此,我们的Makefile文件中,只需给出相应的编译工具即可。
废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:
#include 《stdio.h》
int add( int a , int b ) {
return a+b;
}
你需要编写一个Makefile文件,这里假设你的Android ndk被安装在 /opt/android/ndk 目录下,当然,你可以根据自己的实际情况修改Makefile中相关路径的定义,Makefile文件示例如下:
# Makefile Written by ticktick
# Show how to cross-compile c/c++ code for android platform
.PHONY: clean
NDKROOT=/opt/android/ndk
PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm
CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
LD=$(CROSS_COMPILE)ld
CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
LDFLAGS =
TARGET = libmath.a
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
all: $(OBJS)
$(AR) -rc $(TARGET) $(OBJS)
clean:
rm -f *.o *.a *.so
这里不讲Makefile文件的基本原理,只说明一下针对Android环境的Makefile文件编写的注意事项。
(1) CROSS_COMPILE
必须正确给出Android NDK编译工具链的路径,当在目录中执行make命令的时候,编译系统会根据 CROSS_COMPILE 前缀寻找对应的编译命令。
(2) -I$(PLATFORM)/usr/include
由于Android平台没有使用传统的c语言库libc,而是自己编写了一套更加高效更适合嵌入式平台的c语言库,所以系统头文件目录不能再使用默认的路径,必须直到Android平台的头文件目录
(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
这些参数的意义网上基本上都有介绍,我就不一一解释了,并不都是必须添加的,但比较常用。
编译方法:
写好makefile文件,并且保存之后,就可以直接在当前目录下执行make命令,编译完成后,当前目录下会生成 libmath.a ,即可直接拿到Android的jni工程中和使用了。
请问什么是交叉编译跟本地编译有什么区别求大神帮助
你那个代码很可能是在pc平台上交叉编译到arm设备上的。这样你可以在pc上修改程序,然后pc上编译,最后把编译的结果下载到arm中就可以运行了。不知道你说的本地编译是什么意思,通常所说的那种本地编译就是编译的结果还是在pc上运行,如果你期望的是这个的话,可以考虑修改一下编译器的参数,查一下gcc的说明就知道哪个参数是指定交叉编译平台的,把那个参数去掉就是本地编译了。但是,需要注意的是,这样多半不能成功运行,因为交叉编译到arm上的一般是基于某种特殊的linux平台的,即使你使用了linux平台,其中可能有一些函数也会不同的。。。
希望采纳
请问什么是交叉编译跟本地编译有什么区别
你那个代码很可能是在pc平台上交叉编译到arm设备上的。这样你可以在pc上修改程序,然后pc上编译,最后把编译的结果下载到arm中就可以运行了。不知道你说的本地编译是什么意思,通常所说的那种本地编译就是编译的结果还是在pc上运行,如果你期望的是这个的话,可以考虑修改一下编译器的参数,查一下gcc的说明就知道哪个参数是指定交叉编译平台的,把那个参数去掉就是本地编译了。但是,需要注意的是,这样多半不能成功运行,因为交叉编译到arm上的一般是基于某种特殊的linux平台的,即使你使用了linux平台,其中可能有一些函数也会不同的。。。
makefile 交叉编译怎么引用静态库
看你的mysql当前默认的存储引擎:
mysql》
show
variables
like
’%storage_engine%’;
你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql》
show
create
table
表名;
makefile中CROSS_COMPILE = $(CONFIG_CROSS_COMPILE:“%“=%)什么意思
:"%"=%
是一种字符串处理的模式匹配方式, 作用是取CONFIG_CROSS_COMPILE 定义中有"" 括起来的数据值,如
CONFIG_CROSS_COMPILE="arm-none-linux-gnueabi-"
则取出来的值即为arm-none-linux-gnueabi-,就是交叉编译器前缀。
CONFIG_CROSS_COMPILE,通常由make menuconfig 配置时设定,保存如 arm 配置保存在arch/arm/xxx_defconfig中
源代码没有configure文件只有Makefile文件怎么交叉编译 或者丛Makefile文件提取出来configure文件
configure是单独的一个程序,主要是生成Makefile文件的,Makefile不能提取configure,想要Makefile编译,执行make即可,想要交叉编译,必须修改Makefile的编译器参数
现有两个源文件test1.c和test2.c,试给这两个源文件编写Makefile文件,要求使用交叉编辑工具arm-linux-gcc
test: test1.c test2.c
arm-linux-gcc -o $@ $^ -Wall
保存到 makefile( 注意第二行开头是tab, 不是空格), 然后执行 make
交叉编译Makefile
#!/bin/sh
export PATH="$PATH:/Work/QG2101-SDK/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin"
export CROSS_COMPILE =arm-openwrt-linux-muslgnueabi-
make clean
make
CC=$(CROSS_COMPILE)gcc
CFLAGS=-Wall
target=hello.o
hello : $(target)
$(CC) $(CFLAGS) $^ -o $@
%.o : %.c
$(CC) $(CFLAGS) -c $《 -o $@
clean:
rm -f *.o hello
.PHONY : clean

更多文章:
makefile交叉编译(如何制定android交叉编译工具链)
2026年10月14日 22:20
反比例函数图像平移(反比例函数平移后图像怎么画如3-2x/x-2的图像)
2026年10月14日 17:30
电脑上security键在哪(华硕不识别启动u盘,没有security,咋办呢)
2026年10月14日 17:20
delphi treeview使用详解(delphi关于treeview传值)
2026年10月14日 16:30
软件开发app下载安卓(erp软件是否可以做成app下载安装)
2026年10月14日 16:10
liberating是什么意思(liberate是什么意思)
2026年10月14日 14:00
西地那非怎么使用?(西地那非效果怎么样 详解西地那非的使用效果及注意事项)
2026年10月14日 11:30
idea控制台乱码(idea 输出 System.out.println() 控制台乱码)
2026年10月14日 07:30
spring事务的作用(为什么要使用spring的事务,一般在什么情况下使用)
2026年10月14日 05:40




