搭建ubuntu容器内C/C++开发调试环境

这篇具有很好参考价值的文章主要介绍了搭建ubuntu容器内C/C++开发调试环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建容器

为了让容器内的调试器(gdb、lldb)能够正常调试,在创建容器时需要添加参数:

podman添加参数:--cap-add=SYS_PTRACE,docker添加参数--cap-add=SYS_PTRACE --security-opt seccomp=unconfined

否则报错:Error disabling address space randomization: Operation not permitted

如果是使用podman则使用命令:

sudo podman run -itd -p 2023:22 --name ubuntu --cap-add=SYS_PTRACE docker.io/library/ubuntu

如果是docker则使用命令:

sudo docker run -itd -p 2023:22 --name ubuntu --cap-add=SYS_PTRACE --security-opt seccomp=unconfined docker.io/library/ubuntu

名字可以随便取,将主机某个端口映射到容器中的22端口,方便远程SSH,这里为2023。

使用sudo podman attach <容器ID>连接到创建的容器,就进入Shell控制台了。

二、安装软件

1、安装openssh-server

ubuntu在安装软件前需要使用apt update进行源更新。然后使用apt install openssh-server安装openssh-server方便远程SSH连接。

apt update
apt install openssh-server
mkdir /run/sshd
/usr/sbin/sshd&

安装好openssh-server需要先创建/run/sshd目录才能启动,否则报错:

Missing privilege separation directory: /run/sshd

由于ubuntu默认情况是不允许使用root用户远程连接的,所以需要添加一个账号然后使用这个账号进行远程SSH连接,比如使用adduser admin添加一个admin账号。

# adduser admin
Adding user `admin' ...
Adding new group `admin' (1000) ...
Adding new user `admin' (1000) with group `admin' ...
Creating home directory `/home/admin' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y

2、安装其它必要软件

apt install sudo net-tools vim
apt install gcc g++ gdb

sudo方便远程连接时,可以使用root权限;net-tools主要是可以使用netstat查看监听端口。

如果要安装clang和lldb工具链,使用:

sudo apt install clang-15 lldb-15
sudo ln -s /usr/bin/clang-15 /usr/bin/clang
sudo ln -s /usr/bin/clang++-15 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-15 /usr/bin/lldb
sudo ln -s /usr/lib/llvm-15/bin/lldb-server-15.0.7 /usr/bin/

如果想使用源码安装最新版本的GCC、GDB、clang、lldb,可以使用下面的命令来下载、编译、安装:

GCC:

cd ~
gcc_version=13.2.0
gcc_URL=https://mirrors.aliyun.com/gnu/gcc/gcc-${gcc_version}/
curl -LO -C - --no-verbose ${gcc_URL}gcc-${gcc_version}.tar.xz # 下载GCC安装包,`-C -`支持断点续传
tar xf gcc-${gcc_version}.tar.xz
cd gcc-${gcc_version}
./contrib/download_prerequisites # 下载依赖包
mkdir -p build
cd build
../configure --prefix=/usr/local --enable-languages=c,c++ --enable-multilib --enable-nls --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --enable-multiarch --enable-plugin --enable-default-pie --with-system-zlib --enable-threads=posix --enable-checking=release --with-tune=generic --enable-bootstrap
yum install -y glibc-devel.i686 # 如果是CentOS系统,可能会需要此命令,否则会编译不过
make -j8
make install
cd gmp
make install # 安装gmp
cd ~

rm /usr/bin/c++
update-alternatives --install /usr/bin/cc cc /usr/local/bin/gcc 100
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 100
update-alternatives --install /usr/bin/c++ c++ /usr/local/bin/g++ 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 100

echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf
mv /usr/local/lib64/`readlink /usr/local/lib64/libstdc++.so.6`-gdb.py /usr/local/ # 先把安装的py文件移动出来,不然ldconfig会报错
ldconfig

GDB:

cd ~
gdb_version=13.2
gdb_URL=https://mirrors.aliyun.com/gnu/gdb/
curl -LO -C - --no-verbose ${gdb_URL}gdb-${gdb_version}.tar.xz
tar xf gdb-${gdb_version}.tar.xz
cd gdb-${gdb_version}
mkdir build
cd build
../configure
make -j8
make install
cd ~

llvm:

yum install -y python3 python-devel python3-devel swig3 libxml2-devel libedit-devel bison gettext doxygen graphviz # 如果是CentOS可能需要安装这些包
llvm_version=16.0.6
llvm_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-${llvm_version}/
curl -LO -C - --no-verbose ${llvm_URL}llvm-project-${llvm_version}.src.tar.xz
tar xf llvm-project-${llvm_version}.src.tar.xz
cd llvm-project-${llvm_version}
cmake -S llvm -B build -G "Unix Makefiles" -DLLVM_HOST_TRIPLE="x86_64-linux-gnu" -DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-linux-gnu" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld;lldb" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"
make -C build -j8
make -C build install

三、配置

1.让openssh-server启动时自动运行

前面是使用/usr/sbin/sshd&来直接运行openssh-server的,但是每次重启容器后,都需要手动执行这条命令才能远程SSH连接,很麻烦,可以让它在启动时自动运行。

之前笔者的博文配置与管理Ubuntu 21.10中让容器启动即运行SSH服务一节中有介绍CentOS系统如何在容器启动时就运行SSH服务,但是Ubuntu有点不一样,它不会执行/etc/profile.d/下的脚本。这里使用了简单粗暴的方法,直接修改root用户的.bashrc

如果是非root用户,使用sudo -i则会进入root用户,然后在root用户目录编辑.bashrc,在最后添加:

if [[ `ps -e |grep sshd |grep -v "grep" |wc -l` == 0 ]]
then
        /usr/sbin/sshd &
fi

2.修改locale以显示中文

由于ubuntu默认的locale是POSIX不能正常显示中文,需要修改为UTF-8字符编码才能显示中文,可以安装中文zh_CN.UTF-8,如果只是显示中文也可以使用自带的C.utf8

admin@dce3e311d883:~$ locale 
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

使用locale -a查看所有可用的locale

locale -a
C
C.utf8
POSIX

为了让默认的locale改为C.utf8,添加或者修改/etc/default/locale,ubuntu容器默认是没有这个文件的。sudo vim /etc/default/locale新建:

LC_ALL="C.utf8"
LANG="C.utf8"

四、SSH远程连接

远程连接工具比较多,这里介绍一下 Win10自带的OpenSSH工具。

如何安装可以参阅官网使用 Windows 设置来安装 OpenSSH

安装好后的OpenSSH在C:\Windows\System32\OpenSSH目录下。

格式:

ssh -p 端口 用户名@IP
搭建ubuntu容器内C/C++开发调试环境

注意:如果之前创建并连接过相同配置的容器,即IP、账号、端口一致的容器,然后重新创建了,则可能会报错误Host key verification failed

ssh -p 2023 admin@IP
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:4jOJDemqtgvc864kff6h/Fpp3F+6DuGNRsOBkV9kB+U.
Please contact your system administrator.
Add correct host key in C:\\Users\\admin/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\admin/.ssh/known_hosts:1
ECDSA host key for [IP]:2023 has changed and you have requested strict checking.
Host key verification failed.

此时只需要根据提示,打开C:\Users\admin/.ssh/known_hosts文件,找到[IP]:端口相匹配的一行记录删除即可。文章来源地址https://www.toymoban.com/news/detail-481072.html

到了这里,关于搭建ubuntu容器内C/C++开发调试环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用code-server为Docker容器搭建在线开发环境

    Code-server是一个基于服务端的开源VSCode。只要服务器端配置好code-server,就可以在任何浏览器上使用VScode访问服务器的代码进行编程。(GitHub地址:https://github.com/cdr/code-server) Docker是一个开源的Linux容器引擎。我们在日常的开发任务中可以利用Docker容器快速地搭建实验环境或

    2023年04月08日
    浏览(44)
  • Ubuntu 18.04开发环境搭建

            工作不易,为了避免未来需要重装系统的进行折腾,个人进行了Ubuntu环境配置的整合,方便自己未来能顺畅的配置好开发环境,同时分享给大家。本文多出有转载其他文,并相应的标注了转载内容,如有侵权请联系博主删除。 vmware下载: 链接:https://pan.baidu.com

    2024年02月02日
    浏览(61)
  • Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)

    单片机开发IDE环境如KeilMDK,虽然操作简单 ,方便调试。但就是代码编辑风格很老套,中文符号乱码还是常有的事。而如今流行的vscode编辑器很不错,免费且相当轻量级,用来代码开发体验很不错,看着都舒服。Clion IDE体验更好,但就是它不免费且体积较大。Stm32cubeIDE生成工

    2024年02月16日
    浏览(63)
  • Ubuntu搭建RP2040开发环境-1

    2024-4-23 hongxi.zhu 前置依赖(可选) 一、下载SDK和编译链 下载SDK 下载交叉编译链 配置 在最后追加 二、编译实例工程 新开一个终端,进入 pico-examples 目录 编译blink编程 编译完成同级目录下生成:blink.uf2、blink.elf、blink.bin 格式 下载方式 .uf2 USB拖拽到flash中 .elf SWD下载 .bin fla

    2024年04月26日
    浏览(36)
  • ubuntu开发环境搭建遇到问题与解决

    ubuntu与windows可以进行复制粘贴操作: 更新源 ssh安装: samba环境搭建

    2024年02月07日
    浏览(44)
  • ubuntu20嵌入式开发环境搭建

    安装步骤:省略。 网上有很多教程,不做笔记了。 值得注意的一点:安装时建议选择中文安装,会默认带有中文输入法。 安装Vmware Tools后,可以实现主机跟虚拟机之间的文件拷贝,文本内容的复制粘贴等操作。使用起来更方便。 依次使用下面的命令即可完成安装: sudo ap

    2024年02月19日
    浏览(38)
  • ubuntu can应用开发环境搭建指南

    can数据发送这个采用来自网上的一段代码进行测试: can_send.c代码内容如下:

    2024年02月11日
    浏览(51)
  • 使用VSCode的 Dev Containers 插件搭配Docker 容器进行开发环境的搭建

    需要安装插件 https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers 安装Docker 这样做的好处 每一个项目可以运行一个容器,在容器内开发,相关之间node环境隔离,彻底解决本地包版本依赖关错乱问题 共用宿主机的git 配置, 如果用的是 alpine 版本的镜像,则没有

    2024年01月21日
    浏览(70)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(66)
  • Ubuntu下搭建Vue开发环境,开发第一个程序并部署

        Vue.js目前是前端技术比较火热的开发框架,是一个基于JavaScript的前端开发框架,它可以轻松地构建大型的单页面应用程序。因为项目需要在此记录一下Ubuntu下如何搭建Vue开发环境。 目录 1.nodejs + npm安装 2.安装CNMP(非必要) 3.Vue安装 4.创建程序软连接 5.创建Vue项目 5.部署

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包