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

OSX 生成 Linux 可执行文件

  •  
  •   stancaohua 2020-01-20 12:48:38 +08:00 5180 次点击
    这是一个创建于 2091 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人初学者,想问问在 macbook 下能编译生成目标平台为 Linux 的可执行文件( c 语言写的,clion 生成的)吗?我用 file 命令看到的是 Mach-O 格式的,好像不能直接在 Linux 系统下运行。

    还是说必须要在 Linux 系统下编译才能在 Linux 系统下执行?或者需要配置 clion 吗?

    26 条回复    2020-01-20 20:15:59 +08:00
    knowckx
        1
    knowckx  
       2020-01-20 12:49:53 +08:00   2
    来用 go 吧,交叉编译,你值得拥有
    ysc3839
        2
    ysc3839  
       2020-01-20 12:52:34 +08:00 via Android
    不一定要在 Linux 下编译,你这种情况叫做交叉编译,即在当前系统下编译另一平台 /系统的程序。
    不过如果不想折腾的话,我还是建议虚拟机安装 Linux 编译。
    hyq
        3
    hyq  
       2020-01-20 12:54:26 +08:00
    你需要交叉编译器,就可以编译出其他平台的二进制
    github.com/tpoechtrager/osxcross
    jinliming2
        4
    jinliming2  
       2020-01-20 12:54:44 +08:00 via iPhone
    交叉编译,不想折腾的话装个 Docker 在容器里编译就行……
    azh7138m
        5
    azh7138m  
       2020-01-20 12:54:53 +08:00
    能。
    不是。
    或许不用,就正常写 makefile (?
    ashong
        6
    ashong  
       2020-01-20 13:02:16 +08:00 via iPhone
    我用 go 编译生成运行没问题
    orvice
        7
    orvice  
       2020-01-20 13:06:31 +08:00
    docker
    stancaohua
        8
    stancaohua  
    OP
       2020-01-20 13:11:03 +08:00
    @ashong
    @knowckx 作业要求用 c 写。。
    @ysc3839
    @hyq
    @jinliming2 嗯嗯我去了解下交叉编译,我现在就是用 docker 重新搭了一套 cmake 用 makefile 编译的
    @azh7138m clion 自动生成的 makefile 好像没看到可以改目标平台的地方
    qieqie
        9
    qieqie  
       2020-01-20 13:14:15 +08:00
    @hyq 你这个反了,这个是 host linux, target macos 的 toolchain
    楼主既然用 clion,可以用 ide 支持的相关 remote build 功能: https://www.jetbrains.com/help/clion/remote-projects-support.html
    wizardoz
        10
    wizardoz  
       2020-01-20 13:18:44 +08:00
    clion remote build 或者 交叉编译
    Nasei
        11
    Nasei  
       2020-01-20 13:20:53 +08:00
    你要周围有 win10 的笔记本,可以用 wsl 编译
    clayyj1210
        12
    clayyj1210  
       2020-01-20 13:21:49 +08:00
    @ashong 不同平台上编译,一些底层依赖还是有点差异的。
    virusdefender
        13
    virusdefender  
       2020-01-20 13:42:49 +08:00
    交叉编译还是有些麻烦的,直接 docker 吧。
    ccpp132
        14
    ccpp132  
       2020-01-20 13:47:26 +08:00
    初学者建议要交 linux 就用 linux 写,别耍杂技
    hanai
        15
    hanai  
       2020-01-20 14:01:49 +08:00
    用 docker 最方便
    augustheart
        16
    augustheart  
       2020-01-20 14:11:57 +08:00
    安装相应平台的工具链,编译时候加上 arch,正常写就行了。
    augustheart
        17
    augustheart  
       2020-01-20 14:12:45 +08:00
    交叉编译不难,但是编译环境要折腾。
    Vegetable
        18
    Vegetable  
       2020-01-20 14:17:47 +08:00
    得不偿失,如果只是作业需要 linux,没必要非得交叉编译。如果作业是交叉编译...
    VDimos
        19
    VDimos  
       2020-01-20 14:20:36 +08:00 via Android
    可以,有几个方案:
    1.交叉编译,看语言有没有工具链可以用,大概率有的
    2. docker 中编译目标系统可执行文件
    3. 虚拟机,同 2
    4. 云服务器
    loading
        20
    loading  
       2020-01-20 14:23:14 +08:00 via Android   6
    别信楼上这些,乖乖先装个虚拟机 vbox 就挺好,把作业写完
    misaka19000
        21
    misaka19000  
       2020-01-20 14:57:20 +08:00
    交叉编译

    最好的方式是 docker
    seakingii
        22
    seakingii  
       2020-01-20 16:39:24 +08:00 via Android
    虚拟机最适合你
    secondwtq
        23
    secondwtq  
       2020-01-20 19:22:36 +08:00
    你编译好了 Linux 文件直接交上去么?没个 Linux 环境测试怎么知道能不能用
    pmx1990
        24
    pmx1990  
       2020-01-20 20:06:29 +08:00
    你知道 docker 吗 /狗头
    xiri
        25
    xiri  
       2020-01-20 20:13:06 +08:00
    不就是交叉编译吗,不过建议你还是用 linux 写,方便测试,出了问题也好排查
    zhuangzhuang1988
        26
    zhuangzhuang1988  
       2020-01-20 20:15:59 +08:00
    上 linux, 先好好写 c, 算法.
    暂时不需要研究这些,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1009 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:39 PVG 02:39 LAX 11:39 JFK 14:39
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'programmer'); ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86