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

macOS下使用Scons安装Openloops遇-rpath=$ORIGIN报错如何解决?

macOS下Scons构建Openloops rpath语法错误解决方案

错误原因

macOS原生ld链接器与GNU ld的rpath参数语法存在差异:GNU ld使用-rpath=路径格式,而macOS ld要求使用-rpath,路径格式,这是触发ld: unknown option: -rpath=$ORIGIN报错的核心原因。

解决方案

方案1:修改Scons构建配置(推荐,长期生效)

不需要完全重写官方SConstruct文件,只需要做小的适配修改即可:

  • 打开官方提供的SConstruct文件,搜索rpath相关的链接参数配置,通常是通过env.Append(LINKFLAGS = [...])或者Scons内置RPATH变量定义的
  • 增加Darwin(macOS)系统的分支判断,修改对应参数格式,示例修改逻辑:
import os
# 识别当前系统
if os.uname().sysname == "Darwin":
    # macOS下使用逗号格式的rpath参数
    env.Append(LINKFLAGS = ["-Wl,-rpath,$ORIGIN"])
else:
    # 其他系统保留原有等号格式
    env.Append(LINKFLAGS = ["-Wl,-rpath=$ORIGIN"])
  • 如果你不想修改SConstruct文件,也可以在执行scons命令时直接覆盖链接参数:
scons LINKFLAGS="-Wl,-rpath,$ORIGIN"

方案2:使用ld wrapper脚本(无需修改构建脚本)

bash/zsh的别名仅支持替换命令名称,无法匹配替换命令的后续参数,因此需要编写简单的wrapper脚本处理参数替换:

  • 新建名为ld-wrapper的文本文件,写入以下内容:
#!/bin/bash
processed_args=()
for arg in "$@"; do
    # 将所有参数中的-rpath=替换为-rpath,
    processed_args+=("${arg//-rpath=/-rpath,}")
done
# 调用系统原生ld执行处理后的参数
exec /usr/bin/ld "${processed_args[@]}"
  • 给脚本添加可执行权限:
chmod +x ./ld-wrapper
  • 执行scons时指定使用该wrapper作为链接器:
scons LD=$(pwd)/ld-wrapper

构建完成后删除该wrapper脚本即可,不会对系统环境产生其他影响。

内容的提问来源于stack exchange,提问作者Felix47

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:18:03