如何向通过-load-pass-plugin加载的LLVM opt插件传递命令行参数?
解决LLVM Opt插件命令行参数传递问题
问题原因
opt的命令行参数解析逻辑是先处理自身内置参数,再加载插件。你在插件里定义的cl::opt<int> suka在opt初始解析阶段还未完成注册,所以-suka=100会被opt判定为未知参数,引发报错。
解决方法
方法1:用--分隔内置参数与插件参数
把插件专属参数放在--之后,opt会将--后面的所有参数直接传递给插件处理,不再自行解析:
opt -load-pass-plugin=./libMyPlugin.so -passes=my-pass test.ll -S -o test_output.ll -- -suka=100
方法2:使用新PM的插件参数传递格式
针对新Pass Manager(PM)的插件,LLVM提供了专门的参数传递语法:-plugin-arg-<pass名称> <参数>。如果你的pass名为my-pass,可以这样写:
opt -load-pass-plugin=./libMyPlugin.so -passes=my-pass -plugin-arg-my-pass suka=100 test.ll -S -o test_output.ll
这种方式无需额外分隔符,opt会自动将参数路由到对应的pass插件。
代码层面的注意事项
确保你的cl::opt变量处于全局作用域,这样插件加载时参数能被正确注册。如果是在新PM环境下开发,也可以考虑使用PassOptions类来更规范地管理参数,避免直接依赖全局cl::opt。
内容的提问来源于stack exchange,提问作者0x11111
相关产品推荐
相关产品推荐

