首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在模拟arm对接程序中运行x64可执行文件

在模拟arm对接程序中运行x64可执行文件
EN

Stack Overflow用户
提问于 2022-02-01 17:57:41
回答 1查看 270关注 0票数 0

是否有可能在linux对接程序中运行x64可执行文件,并在x64计算机上进行仿真?

我想使用这个来实现快速交叉编译,而不改变构建系统的体系结构或坞映像。目前,我在arm停靠程序中编译了C++和C源代码,但是所有的可执行文件都是通过QEMU进行仿真的,这会导致编译时间非常慢。如果编译器和链接器可执行文件是x64可执行文件,则整个过程将加速。

我知道这种方法有一个可行的替代办法,我想避免:

  • 提取主机系统上的整个docker文件系统
  • 使用clang或gcc与--sysroot参数交叉编译,使用此提取的文件系统
EN

回答 1

Stack Overflow用户

发布于 2022-02-02 00:03:07

从码头方面来看,使用buildkit是相当简单的。您将创建一个Dockerfile,该文件包含如下内容:

代码语言:javascript
运行
复制
FROM --platform=$BUILDPLATFORM your_build_image as build
WORKDIR /src/
COPY . /src/
ARG TARGETOS
ARG TARGETARCH
RUN make cross-compile-${TARGETOS}-${TARGETARCH}

FROM your_target_image
COPY --from=build /src/app /usr/local/bin/app

其中的关键部分:

  • --platform=$BUILDPLATFORM:它使用与构建程序OS/体系结构相匹配的映像,而不是正在构建的目标。
  • ${TARGETOS}${TARGETARCH} --它们是由buildx自动注入的,并引用Go GOOS和GOARCH值(因为Docker是用Go编写的)。

RUN make ...取决于您如何为不同的平台构建应用程序,并根据COPY中的路径进行适当的更改。

有了它,您可以运行:

代码语言:javascript
运行
复制
# if you have buildkit enabled and want a single platform image
docker build --platform=linux/amd64 .
# or use buildx for creating multiplatform images, this requires pushing to a registry
docker buildx build --platform=linux/amd64,linux/arm64 --push -t $REGISTRY/$IMAGE:$TAG .

linux/arm64系统和BUILDPLATFORM将设置为linux/arm64TARGETOS=linuxTARGETARCH=amd64

您可以在Dockerfile文档中看到更多关于自动构建args的信息。

除此之外,如果您需要帮助执行实际的C/C++交叉编译,这可能需要其他人的帮助,也许是一个单独的问题,包括您遇到的错误示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70945299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档