解决Obfuscator(llvm-9.0)编译错误'undefined reference to llvm::createLowerSwitchPass()'

解决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链接时,找不到函数的定义。

修复问题的方法如下:

  1. 修改obfuscator/tools/lto/CMakeLists.txt文件:

    1 set(LLVM_LINK_COMPONENTS                         
    2 +++  Obfuscation # --[FIX err]
    3 +++  TransformUtils # --[FIX err]
    4   AllTargetsAsmParsers
    5   AllTargetsCodeGens
    
  2. 修改obfuscator/tools/llvm-lto/CMakeLists.txt文件:

    1 set(LLVM_LINK_COMPONENTS                         
    2 +++  Obfuscation # --[FIX err]
    3 +++  TransformUtils # --[FIX err]
    4   AllTargetsAsmParsers
    5   AllTargetsCodeGens
    
  3. 修改obfuscator/tools/llvm-lto2/CMakeLists文件:

    1 set(LLVM_LINK_COMPONENTS                         
    2 +++  Obfuscation # --[FIX err]
    3 +++  TransformUtils # --[FIX err]
    4   AllTargetsAsmParsers
    5   AllTargetsCodeGens
    
  4. 修改obfuscator/unittests/IR/CMakeLists.txt文件:

    1 set(LLVM_LINK_COMPONENTS                                           
    2 +++  Obfuscation # --[FIX err]
    3 +++  TransformUtils # --[FIX err]
    4   Analysis
    5   AsmParser
    
  5. 修改obfuscator/unittests/Passes/CMakeLists.txt文件

    10 set(LLVM_LINK_COMPONENTS                                           
    11 +++     Obfuscation # --[FIX err]
    12 +++     TransformUtils # --[FIX err]
    13         Support                                                   
    14         Passes                                                     
    15         Core)
    
  6. 最后,重新生成CMake工程,然后执行make命令

注意:

上面的方法太复杂了。 我认为,可能存在有一种更好的方法可以解决此问题,可能是修改其他cmake-config来将函数定义(llvm :: createLowerSwitchPass)编译到其他归档文件中。 此刻,我还不知道。

如果您的方法比我的方法好,请告诉我。 谢谢。

邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/weixin_46222091/article/details/105461492