为ARM架构编译我的C++代码

为ARM架构编译我的C++代码,c++,linux,gcc,java-native-interface,arm,C++,Linux,Gcc,Java Native Interface,Arm,我是一名java开发人员。我有一些C++代码来做一些系统调用。这段代码是在Intel 32位平台上使用GCC编译的,我有make文件,它在基于Intel的常规32位linux机器上运行良好。现在我需要在Marvell ARM处理器上运行的linux操作系统上运行它。在java中加载共享对象时,出现以下错误 无法打开共享对象文件:没有此类文件或目录可能原因:无法加载IA 32位。因此在ARM位平台上 请告诉我如何解决这个问题。我查看了GCC选项,发现了一个用于指定体系结构的选项-march=arm

我是一名java开发人员。我有一些C++代码来做一些系统调用。这段代码是在Intel 32位平台上使用GCC编译的,我有make文件,它在基于Intel的常规32位linux机器上运行良好。现在我需要在Marvell ARM处理器上运行的linux操作系统上运行它。在java中加载共享对象时,出现以下错误

无法打开共享对象文件:没有此类文件或目录可能原因:无法加载IA 32位。因此在ARM位平台上

请告诉我如何解决这个问题。我查看了GCC选项,发现了一个用于指定体系结构的选项-march=armv5,我无法使用该选项进行编译


提前感谢。

尝试为gcc使用-mcpu=armv5开关。

尝试为gcc使用-mcpu=armv5开关。

您需要的不仅仅是开关,还需要交叉编译器。您可以自己制作,但最简单的方法可能是:

找到适合您板的开发工具。它可能附带了一个开发工具包,其中包括一个交叉编译工具链

如果没有这些,可以尝试安装预编译的交叉编译,就像CodeSourcery免费提供的那样

然后,您必须使工具链的位置在您的路径中找到类似arm none linux gnueabi gcc的内容

交叉编译简单项目很容易,只需覆盖Makefile中的CC变量:

CROSS = arm-none-linux-gnueabi-
CC = $(CROSS)gcc
LD = $(CROSS)ld

你需要的不仅仅是一个开关,你还需要一个交叉编译器。您可以自己制作,但最简单的方法可能是:

找到适合您板的开发工具。它可能附带了一个开发工具包,其中包括一个交叉编译工具链

如果没有这些,可以尝试安装预编译的交叉编译,就像CodeSourcery免费提供的那样

然后,您必须使工具链的位置在您的路径中找到类似arm none linux gnueabi gcc的内容

交叉编译简单项目很容易,只需覆盖Makefile中的CC变量:

CROSS = arm-none-linux-gnueabi-
CC = $(CROSS)gcc
LD = $(CROSS)ld
下面是写在上面的内容:

下面是写在上面的内容:


您需要一个交叉编译器,或者只需在Linux ARM系统上重新编译。请访问为许多主机和目标平台提供创建交叉编译器套件的网站。同样,crosstool ng主页:@Hasturkun:已经提到过!?获取codesourcery编译器,并在makefile中交叉编译您的程序,将gcc替换为arm none linux gcc等。您需要一个交叉编译器,或者只需在linux arm系统上重新编译。请访问为许多主机和目标平台提供创建交叉编译器套件的网站。同样,crosstool ng主页:@Hasturkun:已经提到过!?获取codesourcery编译器,并在makefile中交叉编译您的程序,将gcc替换为arm none linux gcc等。-不推荐使用mcpu。如果使用-march=armv5,则会出现以下错误。错误:错误值armv5 for-march=Switch在大多数情况下,此案例包括您需要一个针对ARM环境的交叉编译器,而生成英特尔代码的编译器将不知道如何也编译ARM代码。-mcpu不推荐使用。如果使用-march=armv5,则会出现以下错误。错误:错误值armv5 for-march=switch在大多数情况下,此案例包括您需要一个针对ARM环境的交叉编译器,而生成英特尔代码的编译器将不知道如何也编译ARM代码。