首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker容器中的交叉编译器链接

Docker容器中的交叉编译器链接
EN

Stack Overflow用户
提问于 2020-10-02 22:47:14
回答 1查看 400关注 0票数 0

我在使用docker容器与visual studio 2019交叉编译程序时遇到了一些问题。

这是我的docker文件

代码语言:javascript
运行
复制
FROM ubuntu:16.04

RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -sf /bin/true /sbin/initctl
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update
RUN apt-get -y upgrade

# install 32 bit libraries required for gnuarm tools from
# https://launchpad.net/gcc-arm-embedded & a few minimalistic tools with ssh server
RUN dpkg --add-architecture i386 && \
    apt-get update && \
    apt-get -y install \
    libc6:i386 libncurses5:i386 libstdc++6:i386 libpython2.7:i386 vim \
    make git unzip \
    sudo curl less tree openssh-server

# clean cache
RUN apt-get clean

RUN mkdir -p /var/run/sshd

COPY *.tgz /tmp/
RUN cd /tmp && \
    tar zxvf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf_5.3_sub1.0.3.tgz -C /opt && \
    tar zxvf Compiler_gcc-linaro-5.3_patch_1.2.2.tgz && \
    cd Compiler_gcc-linaro-5.3_patch && \
    bash ./install-owa4x-comp-PATCH-1.2.2.sh && \
    cd / && \ 
    rm -rf /tmp/*
ENV PATH="${PATH}:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin"

RUN useradd -G sudo --create-home --shell /bin/bash --user-group myuser

RUN echo "myuser:myuser_pwd" | chpasswd

RUN echo "PATH=$PATH:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linuxgnueabihf/bin" >> /etc/profile
CMD ["source /etc/profile"]

CMD ["/usr/sbin/sshd", "-D"]
EXPOSE 22

ENV WORKSPACE /home/myuser/workspace
VOLUME ${WORKSPACE}

下面是如何创建我的图像

代码语言:javascript
运行
复制
docker build --tag cc_arm .
myuser@ubuntu:~/Documents/share$ docker run -d -p 5000:22 -v /home/myuser/Documents/share:/home/myuser/workspace cc_arm

但是当我打开一个shell并输入

代码语言:javascript
运行
复制
which g++ 
which gcc 

我一无所有。我还尝试手动设置路径

代码语言:javascript
运行
复制
export C="/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc"
export CXX="/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++"

echo 'export CC=/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc' >> ~/.bashrc
echo 'export CXX=/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++' >> ~/.bashrc

但它不起作用。

我认为我的环境还可以,因为我可以使用包中的g++交叉编译一个简单的程序(位于/usr/bin/g++中)

代码语言:javascript
运行
复制
 sudo apt install -y openssh-server build-essential gdb rsync ninja-build zip

提前谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2020-10-06 15:43:34

最后,我将Visual Studio2019中的项目更改为CMake项目。我已经在容器的共享卷中创建了一个CMake文件。

代码语言:javascript
运行
复制
SET(CMAKE_C_COMPILER    /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER  /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_STRIP /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip)

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_SYSTEM_VERSION 1)

在Visual Studio 2019中,我更改了launch.vs.json

代码语言:javascript
运行
复制
"configurations": [
    {
      "type": "cppgdb",
      "name": "CMakeProject6 (CMakeProject6\\CMakeProject6)",
      "project": "CMakeLists.txt",
      "projectTarget": "CMakeProject6 (CMakeProject6\\CMakeProject6)",
      "debuggerConfiguration": "gdb",
      "args": [],
      "env": {},
      "remoteMachineName": "10.0.0.1 (username=root, port=22, authentication=Password)",
      "deploy": [
        {
          "sourceMachine": "192.168.72.144 (username=root, port=5000, authentication=Password)", // DOCKER CONTAINER
          "targetMachine": "10.0.0.1 (username=root, port=22, authentication=Password)", // REMOTE MACHINE
          "deploymentType": "RemoteRemote"
        }
      ]
    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64173586

复制
相关文章

相似问题

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