解决Obfuscator(llvm-9.0)编译错误’undefined reference to llvm::createLowerSwitchPass()’
我在本地编译Obfuscator(llvm-9.0)出现了如下错误:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGg3FcSn-1586615972574)(./img/obfuscator_compilation_error.png)]
正如以上报错信息所示,‘undefined reference to llvm::createLowerSwitchPass()’。
问题的原因是CMake配置文件中少链接了组件,导致在ld链接时,找不到函数的定义。
修复问题的方法如下:
-
修改obfuscator/tools/lto/CMakeLists.txt文件:
1 set(LLVM_LINK_COMPONENTS 2 +++ Obfuscation # --[FIX err] 3 +++ TransformUtils # --[FIX err] 4 AllTargetsAsmParsers 5 AllTargetsCodeGens
-
修改obfuscator/tools/llvm-lto/CMakeLists.txt文件:
1 set(LLVM_LINK_COMPONENTS 2 +++ Obfuscation # --[FIX err] 3 +++ TransformUtils # --[FIX err] 4 AllTargetsAsmParsers 5 AllTargetsCodeGens
-
修改obfuscator/tools/llvm-lto2/CMakeLists文件:
1 set(LLVM_LINK_COMPONENTS 2 +++ Obfuscation # --[FIX err] 3 +++ TransformUtils # --[FIX err] 4 AllTargetsAsmParsers 5 AllTargetsCodeGens
-
修改obfuscator/unittests/IR/CMakeLists.txt文件:
1 set(LLVM_LINK_COMPONENTS 2 +++ Obfuscation # --[FIX err] 3 +++ TransformUtils # --[FIX err] 4 Analysis 5 AsmParser
-
修改obfuscator/unittests/Passes/CMakeLists.txt文件
10 set(LLVM_LINK_COMPONENTS 11 +++ Obfuscation # --[FIX err] 12 +++ TransformUtils # --[FIX err] 13 Support 14 Passes 15 Core)
-
最后,重新生成CMake工程,然后执行make命令
注意:
上面的方法太复杂了。 我认为,可能存在有一种更好的方法可以解决此问题,可能是修改其他cmake-config来将函数定义(llvm :: createLowerSwitchPass)编译到其他归档文件中。 此刻,我还不知道。
如果您的方法比我的方法好,请告诉我。 谢谢。
邮箱:18428388868@163.com