You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Boost用户配置文件中正确传递-fuse-ld=lld参数?

如何在Boost用户配置文件中正确传递-fuse-ld=lld参数?

我懂你这种纠结——用msvc-wine配合clang-cl在Linux上编译Windows二进制,Boost.Build的配置里试了<compileflags>和<linkflags>都没法把-fuse-ld=lld传给clang-cl,只能临时塞到wrapper脚本里,总觉得不是正道对吧?

其实问题出在Boost.Build对clang-win工具集的参数传递逻辑上:-fuse-ld=lld是clang驱动本身的参数,用来指定链接器为lld,而非传统意义上直接传给链接器的参数。所以你需要用更合适的配置项来传递它,这里有两种稳妥的方式:

方式一:用<cxxflags>传递(推荐)

<cxxflags>会把参数直接传给clang-cl驱动,不管是编译还是链接阶段都会生效,刚好匹配-fuse-ld=lld的需求。修改你的user-config.jam如下:

using clang-win :  : clang-msvc.sh :
    <manifest-tool>llvm-mt
    <compileflags>/std:c++17
    <compileflags>/EHa
    <cxxflags>-fuse-ld=lld
;

方式二:用<rawflags>强制传递

如果你希望确保参数原封不动传给clang-cl,可以用<rawflags>,它会跳过Boost.Build的参数解析逻辑,直接把参数传递给工具:

using clang-win :  : clang-msvc.sh :
    <manifest-tool>llvm-mt
    <compileflags>/std:c++17
    <compileflags>/EHa
    <rawflags>-fuse-ld=lld
;

为什么之前的<linkflags>没生效?

Boost.Build的<linkflags>默认是用来传递给底层链接器的参数,但这里我们是要告诉clang驱动去调用lld,而不是直接给lld传参数。所以<linkflags>的参数会被clang-cl当成传给链接器的选项,而非驱动本身的指令,自然不会生效。

验证配置是否生效

你可以在运行Boost.Build时加上-d+2参数,查看实际执行的命令行,确认-fuse-ld=lld已经出现在clang-cl的参数列表里,这样就说明配置成功了。

备注:内容来源于stack exchange,提问作者Robert Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:35:31