gpt4 book ai didi

c++ - 加载 LLVM 插件时 undefined symbol

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:43 24 4
gpt4 key购买 nike

我正在开发一个 LLVM pass,并希望通过 Clang LLVM 驱动程序将其作为插件运行:

clang -Xclang -load -Xclang myPlugin.so ...

一开始我遇到了类似这里描述的错误

按照建议应用标志 -D_GLIBCXX_USE_CXX11_ABI=0 后,出现此错误:

error: unable to load plugin 'myPlugin.so': 'myPlugin.so: undefined symbol: _ZNK4llvm12FunctionPass17createPrinterPassERNS_11raw_ostreamERKSs

此页面表明可能存在 ABI 兼容性问题(我不完全理解)

我的目标是使用 GCC 或 Clang 编译传递并使用系统 Clang 安装(Ubuntu 16.04、LLVM 3.8)运行它,而不是从源代码构建 Clang/LLVM。

最佳答案

问题可能来自多个 clang 安装。您用于编译插件的 clang 版本可能与在

中调用的 clang 不同
clang -Xclang -load -Xclang myPlugin.so ...

如果您使用cmake 构建您的插件,那么

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

将生成文件 compile_commands.json,其中将包含您使用的 llvm 版本。如果您的插件不使用 cmake,则可以使用 bear makemake -n

如果 compile_commands.json 包含例如

"command": "c++ -c -I/usr/lib/llvm-4.0/include ..."

如果 clang -vclang version 3.8.0,您可能会收到此错误消息,尤其是 llvm::FunctionPass::createPrinterPass 在 llvm-4.0 中而不在 llvm-3.8 中。

一个解决方案可能是编译

clang-xxx -Xclang -load -Xclang myPlugin.so ...

其中 clang-xxx 包含 compile_commands.json 中引用的 llvm-xxx

关于c++ - 加载 LLVM 插件时 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43745850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com