V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qazwsxkevin
V2EX  ›  程序员

armbian 和 debian 系统,在这些情景,有这些 C++的编译问题...

  •  
  •   qazwsxkevin · 101 天前 · 1731 次点击
    这是一个创建于 101 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. debian 上 gcc 编译后的可执行文件,可否在 armbian 系统下运行?
    2. armbian 平台的性能弱(机顶盒),虽说也能在上面装个 gcc 编译 cpp ,来回修改几次代码和编译,就很麻烦了。
      如果要在 win11+VScode ,或 Dev-Cpp 等 IDE ,使用类似 MinGW/MinGW64 的编译器
      这种 armbian 的交叉编译器,去哪里找?怎么部署在 windows 环境下?
    3. 如果不是 armbian ,其它类似 openwrt ,(MIPS 24Kc)的平台呢? 这种交叉编译器,去哪里找?
      虽然在 debian 上能安装 openwrt sdk ,里面是有个编译器,似乎是可以使用它进行交叉编译,这种情形,只有这种办法吗?
      如果只有 windows 来调试代码的话?
    11 条回复    2024-09-24 16:37:43 +08:00
    fcyxp
        1
    fcyxp  
       101 天前   ❤️ 1
    默认你提到的 debian 指的是 x86 架构的 debian
    1.不行,架构不同无法运行。
    2.如果是 arm 的话,可以搜索 linaro 。
    kita
        2
    kita  
       101 天前   ❤️ 1
    你没有 sysroot 拿 linaro 的编译有什么用,看看 debian 的 cross compiling guide
    Ayahuasec
        4
    Ayahuasec  
       101 天前 via Android   ❤️ 2
    openwrt 那个,之前整过一个野路子:主机上把路由器固件的根分区解包出来,然后用 chroot 和 qemu-static 直接进入这个根分区,opkg 装 gcc ,源码放进去,编译需要的软件。最后把编译产物拷贝到路由器上,一般直接就能跑。

    这个操作的优点是不用折腾交叉编译环境,有的时候折腾交叉编译环境都要搞一天,或者有些固件不太好找配套的编译环境。

    缺点就是主机模拟其他架构的程序,跑编译很慢,只适合偶尔用。
    masterclock
        5
    masterclock  
       101 天前   ❤️ 1
    1. debian 是 x86 ?在 armbian 上有可能可以运行,比如安装了 qemu binfmt deng
    2. 找 armbian 的 rootfs 什么的,用 docker 在 x86 的机器上跑起来,在 docker 里开发
    3. mips 24kc 大概只能交叉编译,或者 qemu + mips gcc +chroot 了,openwrt 的 sdk 很容易用,还是交叉编译方便
    yinmin
        6
    yinmin  
       100 天前 via iPhone   ❤️ 1
    armbian 有 2 个版本,基于 debian 或基于 ubuntu 。如果你使用 debian 版本的 armbian ,本质上就是标准的 debian 系统加一些 armbian 的工具和脚本。armbian 支持 arm cpu 和 x64 cpu ,可以交叉编译。

    windows 下使用 vscode remote ssh 到 linux 上开发、编译、调试。最佳实践也许是买一个高性能 8 核 armbian 设备(小几百元)用于远程 ssh 开发。
    openmynet
        7
    openmynet  
       100 天前   ❤️ 1
    找个支持交叉编译的 docker 镜像会比你瞎折腾要来得简单些。之前就用这做过 rust+cpp 在 arm32/64 的编译
    qazwsxkevin
        8
    qazwsxkevin  
    OP
       100 天前
    谢谢各位,明白了,大概好像在 github 上看到有 mips32 交叉编译环境 docker 镜像了,有时间就搞下来试试
    iceheart
        9
    iceheart  
       100 天前 via Android   ❤️ 1
    armbiam 上安装 gcc 编译也可以啊。
    flynaj
        10
    flynaj  
       99 天前 via Android   ❤️ 1
    openwrt 下载那个 toolchain 更 SDK 就行,要什么平台切换到相关目录就行。还有可以考虑 golang 这种跨平台的语言
    kero991
        11
    kero991  
       97 天前
    交叉编译的核心是工具链和 sysroot
    工具链就是 gcc 这些,sysroot 就是一个目标架构(比如 arm64 )的根目录

    工具链的坑在于,如果你单一编译,问题不大,比如你只编译 gcc 。
    如果你什么项目都想试试,那你得配多少工具链?就算是 c ,用 clang 的,用 nanja 的也各不相同
    sysroot 的问题更多,因为你编译任何项目,它都是有依赖的
    你在本地系统只需要 apt install 或者 yum 就能安装一个依赖
    你在交叉编译的 sysroot 里要配置依赖项,可是很麻烦很麻烦的。搞不好,要先从头编译

    最后的最后,你需要测试环境,打包是不是完整,是不是少了什么库文件?

    就我天天编译各种开源 项目的经验来说,我宁可本地,不到万不得已,绝不交叉编译
    当然我有单位的国产电脑(飞腾,arm64 ),我也有 oracle 的 arm 小鸡
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2397 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.