Android X86 4.4 r1 为啥arm应用不能用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android X86 4.4 r1 为啥arm应用不能用相关的知识,希望对你有一定的参考价值。
参考技术A 芯片平台不一样啊,不能兼容 参考技术B arm解析器安装了没?兼容库装齐了吗?如果还是不行的话,建议还是找整合版的镜像吧...........或者,arm解析器也执行不了这个程序本回答被提问者采纳
为啥交叉编译 Arm Linux GCC 时出错?
【中文标题】为啥交叉编译 Arm Linux GCC 时出错?【英文标题】:Why error in cross compiling Arm Linux GCC?为什么交叉编译 Arm Linux GCC 时出错? 【发布时间】:2012-02-11 05:42:19 【问题描述】:我正在尝试使用 AppWeb,我编写了一个非常简单的程序来将 AppWeb 嵌入到我的应用程序中,它使用 AppWeb 库中的一个函数。
#include <appweb/appweb.h>
int main(int argc, char** argv)
return maRunWebServer("appweb.conf");
我不知道当我用 gcc(或 cc)编译时,它编译成功。但是,当我交叉编译到 Arm 架构时,一直出错。 这是我的 Makefile:
CC = gcc
LIBS = lib
FLAG = -lappweb -lmpr
TEST_TARGET = embed-appweb
OBJS = embed-appweb
all: clean compile
compile: run
$(CC) -Wall -L$(LIBS) $(FLAG) -o $(TEST_TARGET) $(OBJS).o
run:
$(CC) -Wall -L$(LIBS) $(FLAG) -c $(OBJS).c
clean:
@rm -rf $(TEST_TARGET) $(TEST_TARGET).trc *.o *~
@echo "Clean complete"
为了交叉编译,我将“CC = gcc”替换为“CC = arm-linux-gcc”。 我的问题中的错误是:
arm-linux-gcc -Wall -Llib -lappweb -lmpr -c embed-appweb.c
embed-appweb.c:1:27: error: appweb/appweb.h: No such file or directory
embed-appweb.c: In function 'main':
embed-appweb.c:4: warning: implicit declaration of function 'maRunWebServer'
make: *** [run] Error 1
我确定库“libappweb.so”存在于我的文件夹“lib”中
有人可能会告诉我,为什么会出错?给我一些建议?
谢谢,
【问题讨论】:
您遇到了什么错误?您确定已在所需位置交叉编译并安装了所需的库吗? 有问题的错误:未提供错误。 啊,我很抱歉 :D 我在帖子中添加了我的错误^^ 【参考方案1】:你知道如何使用gcc的-I选项吗?
您遇到的错误是由于编译器 (gcc) 可以找到您想要包含的文件。
最简单的解决方案是更改 Makefile 中的 FLAG:
FLAG = -lappweb -lmpr
到
FLAG = -lappweb -lmpr -I/path/to/my/headers
当然,您必须将 /path/to/my/headers 更改为您的标头所在的真实路径。
【讨论】:
【参考方案2】:您必须将 appweb 标头安装(或符号链接)到 arm-linux-gcc 包含树中。
例如,我的一个系统的arm-linux-gcc
命令是
$ which arm-linux-gcc
/home/eldk/usr/bin/arm-linux-gcc
所以编译器使用的包含文件是:
$ arm-linux-gcc -print-search-dirs
install: /home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/
programs: =/home/eldk/usr/bin/../libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../libexec/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/:/home/eldk/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/
libraries: =/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/../arm/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/lib/:/home/eldk/usr/../arm/usr/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/usr/lib/
【讨论】:
您的意思是我必须将 appweb 标头复制到 arm-linux-gcc 包含树中?我的 arm-linux-gcc:# which arm-linux-gcc /media/Learning/Embedded-Systems/Soft/gcc-4.3.2/local/arm/4.3.2/bin/arm-linux-gcc
或者我如何将 appweb 标头链接到 arm-linux-gcc?【参考方案3】:
您有两个顾虑:
-
您的包含搜索路径(正如 sessyargc.jp 和 wallyk 已经指出的那样)。
您的图书馆搜索路径。
当您使用gcc
进行编译时,它将使用您的 gcc 配置来查找其自己的工具链中的头文件和库。它将默认为“/usr/include”和“/usr/lib”之类的内容。
当您使用arm-linux-gcc
进行编译时,就像之前gcc
所做的那样,它将使用您的arm-linux-gcc
配置来查找它自己的工具链中的头文件和库。它可以在任何地方,具体取决于您的工具链(即 wallyk 的“/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/...”)。
请注意,您有两个不同的工具链,每个工具链都有自己的文件。
您不能将针对“x86”构建的库链接到 ARM 二进制文件。它们不兼容!
gcc
链接 gcc 库,arm-linux-gcc
链接 arm-linux-gcc 库。
即使只是纯文本的标头也不能相同,因为不同的处理器可以对字节序、数据大小等有不同的配置。
所以
在编译示例应用程序之前,您必须安装 为 ARM 交叉编译的 AppWeb。
在此之后,您的工具链将可以访问 appweb/appweb.h
和 -lappweb
。
如果您需要有关如何交叉编译 AppWeb 的帮助,请告诉我们。 它必须是源中的自述文件,说明如何执行此操作。
【讨论】:
以上是关于Android X86 4.4 r1 为啥arm应用不能用的主要内容,如果未能解决你的问题,请参考以下文章
genymotion2.8.1安装apk时提示ARM……x86……异常处理