Rust链接LLVM API时RUSTFLAGS环境变量生效但Cargo.toml配置失效是什么原因
问题原因
你出现该问题的核心原因是Cargo配置的存放位置错误:
[build]段的rustflags是Cargo本身的配置项,不能写在项目根目录的Cargo.toml文件中,写在这里的[build]配置会被Cargo完全忽略,相当于你没有添加任何链接参数,自然会出现LLVM-C函数的链接报错。- 而
RUSTFLAGS环境变量是Cargo直接识别的编译参数注入方式,所以用环境变量配置时参数可以正常生效。
解决方法
- 在项目根目录下创建
.cargo文件夹,在文件夹内新建config.toml文件(旧版Cargo也支持名为config的无后缀文件) - 将你之前写在
Cargo.toml里的[build]配置移动到这个新建的.cargo/config.toml文件中 - 建议调整链接参数顺序:由于大部分链接器对参数顺序敏感,库搜索路径
-L参数需要放在链接库-l参数之前,调整后的配置如下:
[build] rustflags = [ "-C", "link-args=-L/usr/lib/llvm/12/lib64", "-lLLVM-12", "-lm", "-ldl", "-lc", "-lpthread", "-lutil", "-lgcc_s" ]
完成上述修改后重新执行cargo build即可正常完成链接。
内容的提问来源于stack exchange,提问作者muke
相关产品推荐
相关产品推荐

