在 Yocto Recipe 中的 x86 主机上为 ARM 执行交叉编译的二进制文件
Execute a cross-compiled binary for ARM on x86 host machine within Yocto Recipe
我有一个 Makefile
其中:
TARGETDIR=../rel/$(PLATFORM)
ANALYZER=$(TARGETDIR)/analyzer
TARGETS=$(ANALYZER)
XMLFILE=pgns.xml
JSONFILE=pgns.json
all: $(TARGETS)
$(ANALYZER): analyzer.c pgn.c analyzer.h pgn.h ../common/common.c ../common/common.h Makefile
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $(ANALYZER) -I../common pgn.c analyzer.c ../common/common.c $(LDLIBS$(LDLIBS-$(@)))
json: $(ANALYZER) pgns2json.xslt
$(ANALYZER) -explain-xml >$(XMLFILE) && xsltproc pgns2json.xslt $(XMLFILE) >$(JSONFILE)
$(ANALYSER)
被编译并存储在 TARGETDIR
中。现在在 json
中调用 analyzer
二进制文件,它提供
| /bin/sh: ../rel/linux-x86_64/analyzer: cannot execute binary file: Exec format error
因为在 file analyzer
时它将文件显示为 ELF 32-bit
文件。我理解这里的不兼容性。
我的 Previous SE Query.
中已解决此问题
因为我无法解决这个问题;我正在考虑在我的食谱中的 postinstall
脚本中使用 json
调用。
但我无法理解它。这些是我制定的步骤:
- 我修改了
Makefile
删除了 json
- 我应该添加
DEPENDS = "libxslt libxml2
吗?
- 我应该添加
RDEPENDS_{PN} = "bash"
来执行json
的命令吗?
- 菜谱的 post-install 应该是什么样的?
食谱:
SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"
#DEPENDS = "libxml2 libxsl"
LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH}"
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"
EXTRA_OEMAKE = "'CC=${CC}' 'AR=${AR}'"
do_compile() {
oe_runmake
}
do_install() {
oe_runmake install
}
#post_install() { # here? what will be the structure}
analyzer 是一个用于生成一些工件的工具,在交叉编译环境中不一定需要为目标编译,而是需要一个平台来 运行(构建主机)和输入文件.
SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"
DEPENDS += "libxslt-native canboat-native"
LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"
SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH} \
file://0001-Do-not-use-root-user-group-during-install.patch \
file://0001-Define-ANALYZEREXEC.patch \
file://0001-use-php-instead-of-php5.patch \
"
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"
S = "${WORKDIR}/git"
PREFIX ?= "${root_prefix}"
#PREFIX_class-native = "${prefix}"
EXTRA_OEMAKE_append_class-target = " ANALYZEREXEC=analyzer "
do_compile() {
oe_runmake
}
do_install() {
oe_runmake DESTDIR=${D} PREFIX=${root_prefix} EXEC_PREFIX=${exec_prefix} install
}
RDEPENDS_${PN}_append_class-target = " php-cli perl"
BBCLASSEXTEND = "native nativesdk"
交叉编译canboat所需的额外补丁在这里
0001-Define-ANALYZEREXEC.patch
我有一个 Makefile
其中:
TARGETDIR=../rel/$(PLATFORM)
ANALYZER=$(TARGETDIR)/analyzer
TARGETS=$(ANALYZER)
XMLFILE=pgns.xml
JSONFILE=pgns.json
all: $(TARGETS)
$(ANALYZER): analyzer.c pgn.c analyzer.h pgn.h ../common/common.c ../common/common.h Makefile
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $(ANALYZER) -I../common pgn.c analyzer.c ../common/common.c $(LDLIBS$(LDLIBS-$(@)))
json: $(ANALYZER) pgns2json.xslt
$(ANALYZER) -explain-xml >$(XMLFILE) && xsltproc pgns2json.xslt $(XMLFILE) >$(JSONFILE)
$(ANALYSER)
被编译并存储在 TARGETDIR
中。现在在 json
中调用 analyzer
二进制文件,它提供
| /bin/sh: ../rel/linux-x86_64/analyzer: cannot execute binary file: Exec format error
因为在 file analyzer
时它将文件显示为 ELF 32-bit
文件。我理解这里的不兼容性。
我的 Previous SE Query.
中已解决此问题因为我无法解决这个问题;我正在考虑在我的食谱中的 postinstall
脚本中使用 json
调用。
但我无法理解它。这些是我制定的步骤:
- 我修改了
Makefile
删除了json
- 我应该添加
DEPENDS = "libxslt libxml2
吗? - 我应该添加
RDEPENDS_{PN} = "bash"
来执行json
的命令吗? - 菜谱的 post-install 应该是什么样的?
食谱:
SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"
#DEPENDS = "libxml2 libxsl"
LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH}"
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"
EXTRA_OEMAKE = "'CC=${CC}' 'AR=${AR}'"
do_compile() {
oe_runmake
}
do_install() {
oe_runmake install
}
#post_install() { # here? what will be the structure}
analyzer 是一个用于生成一些工件的工具,在交叉编译环境中不一定需要为目标编译,而是需要一个平台来 运行(构建主机)和输入文件.
SUMMARY = "CANBOAT"
SECTION = "base"
LICENSE = "GPLv3"
DEPENDS += "libxslt-native canboat-native"
LIC_FILES_CHKSUM = "file://GPL;md5=05507c6da2404b0e88fe5a152fd12540"
SRC_URI = "git://github.com/canboat/canboat.git;branch=${SRCBRANCH} \
file://0001-Do-not-use-root-user-group-during-install.patch \
file://0001-Define-ANALYZEREXEC.patch \
file://0001-use-php-instead-of-php5.patch \
"
SRCBRANCH = "master"
SRCREV = "93b2ebfb334d7a9750b6947d3a4af9b091be2432"
S = "${WORKDIR}/git"
PREFIX ?= "${root_prefix}"
#PREFIX_class-native = "${prefix}"
EXTRA_OEMAKE_append_class-target = " ANALYZEREXEC=analyzer "
do_compile() {
oe_runmake
}
do_install() {
oe_runmake DESTDIR=${D} PREFIX=${root_prefix} EXEC_PREFIX=${exec_prefix} install
}
RDEPENDS_${PN}_append_class-target = " php-cli perl"
BBCLASSEXTEND = "native nativesdk"
交叉编译canboat所需的额外补丁在这里
0001-Define-ANALYZEREXEC.patch