compiler-errors - 在程序上使用 llvm 传递时,错误:无法执行命令:分段错误(核心转储)
问题描述
一个简单的 LLVM 传递示例,用于 LLVM-7.0.0。尝试运行时出现此错误:
clang -I~/clang_llvm2/include -Xclang -load -Xclang build/skeleton/libSkeletonPass.* test/a.cpp
我看到了一个叫做 main 的函数!
...
clang-7:错误:无法执行命令:分段错误(核心转储)clang-7:错误:clang 前端命令因信号而失败(使用 -v 查看调用)clang 版本 7.0.0(tags/RELEASE_700/final)目标:x86_64-unknown-linux-gnu 线程模型:posix clang-7:注意:诊断消息:请向https://bugs.llvm.org/提交错误报告,并包括崩溃回溯、预处理源和相关运行脚本。clang-7:错误:无法执行命令:分段错误(核心转储) clang-7:注意:诊断消息:生成预处理源时出错。
LLVM-7.0.0 的简单 LLVM 通行证
#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
using namespace llvm;
namespace {
struct SkeletonPass : public FunctionPass {
static char ID;
SkeletonPass() : FunctionPass(ID) {}
bool runOnFunction(Function &F) {
errs() << "I saw a function called " << F.getName() << "!\n";
return false;
}
};
}
char SkeletonPass::ID = 0;
// Automatically enable the pass.
// http://adriansampson.net/blog/clangpass.html
static void registerSkeletonPass(const PassManagerBuilder &,
legacy::PassManagerBase &PM) {
PM.add(new SkeletonPass());
}
static RegisterStandardPasses
RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible,
registerSkeletonPass);
a.cpp 程序是一个简单的 hello world 程序。LLVM_HOME 已正确设置。使用预构建的 llvm 文件。
解决方案
您并不孤单遇到此错误(https://bugs.llvm.org/show_bug.cgi?id=34573RegisterStandardPasses
),自 LLVM 5 起使用 LLVM时,似乎在程序结束时崩溃。
根据这个答案:https ://github.com/sampsyo/llvm-pass-skeleton/issues/7#issuecomment-401834287解决方案是在链接程序时添加-Wl,-znodelete
到编译器标志。它对我有用。
推荐阅读
- reactjs - 更改活动索引时如何使React Native tabview滚动回选项卡顶部
- r - 如何避免 geom_scatterpie() 函数中的重叠
- angular - typedef [Symbol.iterator] 的正确方法是什么?
- c# - 如何在静态方法中将 IConfiguration 对象注入 dotnet 核心项目?
- algorithm - 根据给定数组创建唯一对
- visual-studio - Visual Studio C/C++ Project with MASM code produces error `error A2008: syntax error : .`
- lua - 将 IR 代码列表转换为 Lua 数组/表
- c# - 如何模拟实体框架的 FromSqlRaw 方法?
- android - RecyclerView Android中按标题(1.名称,11.名称,2.名称)排序列表
- r - 如何在没有 for 循环的情况下重复生成随机样本 1000 次并绘制 alpha 估计器的图?