是否有可能在linux对接程序中运行x64可执行文件,并在x64计算机上进行仿真?
我想使用这个来实现快速交叉编译,而不改变构建系统的体系结构或坞映像。目前,我在arm停靠程序中编译了C++和C源代码,但是所有的可执行文件都是通过QEMU进行仿真的,这会导致编译时间非常慢。如果编译器和链接器可执行文件是x64可执行文件,则整个过程将加速。
我知道这种方法有一个可行的替代办法,我想避免:
--sysroot
参数交叉编译,使用此提取的文件系统发布于 2022-02-02 00:03:07
从码头方面来看,使用buildkit是相当简单的。您将创建一个Dockerfile,该文件包含如下内容:
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
中的路径进行适当的更改。
有了它,您可以运行:
# 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/arm64
、TARGETOS=linux
和TARGETARCH=amd64
。
您可以在Dockerfile文档中看到更多关于自动构建args的信息。
除此之外,如果您需要帮助执行实际的C/C++交叉编译,这可能需要其他人的帮助,也许是一个单独的问题,包括您遇到的错误示例。
https://stackoverflow.com/questions/70945299
复制相似问题