首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Halide中提前编译生成位置无关代码

如何在Halide中提前编译生成位置无关代码
EN

Stack Overflow用户
提问于 2019-03-19 06:07:53
回答 1查看 299关注 0票数 0

我正在尝试卤化物,并希望在此基础上构建一个小型共享库。但是,Halide的AOT编译生成的代码似乎并不是独立于位置的。如何将Halide生成的对象链接到我的共享库中?

Update从我的代码中提取了一个小示例。

特别地,我在c++中使用了一个生成器:

代码语言:javascript
复制
class SimpleAddition : public Halide::Generator<SimpleAddition> {
 public:
  SimpleAddition() : vars(4) {}

  Input<Halide::Buffer<>> lhs{"lhs"};
  Input<Halide::Buffer<>> rhs{"rhs"};
  Output<Halide::Buffer<>> out{"out"};

  std::vector<Var> vars;
  void generate() {
    out(vars) = lhs(vars) + rhs(vars);
  }
};

HALIDE_REGISTER_GENERATOR(SimpleAddition, simple_addition)

与来自CMake的助手:

代码语言:javascript
复制
halide_library(ops SRCS ${CMAKE_CURRENT_LIST_DIR}/src/simple_addition.cc
  GENERATOR_NAME simple_addition
  GENERATOR_ARGS lhs.type=float32 lhs.dim=4 rhs.type=float32 rhs.dim=4 out.type=float32)

并得到以下错误:

代码语言:javascript
复制
/usr/bin/ld: ./genfiles/halide_rt_host/halide_rt_host.a(halide_rt_host.a.o): relocation R_X86_64_PC32 against symbol `_ZN6Halide7Runtime8Internal13custom_mallocE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status

我还尝试通过使用CMake自己运行生成器(不使用-e o,h包装器)来生成对象,并以类似的方式运行llvm,后面跟着llc -relocation-model=pic,以及Func::compile_to_object。当我试图将生成的对象链接回共享库时,也发生了类似的错误:

代码语言:javascript
复制
/usr/bin/ld: halide_runtime_x86.o: relocation R_X86_64_PC32 against symbol `_ZN6Halide7Runtime8Internal13custom_mallocE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status

我在Ubuntu 18.10上运行这个。Halide和我的代码都是用gcc-8.2.0编译的。LLVM/Clang-7是在它们的存储库中提供的。卤化物是用简单的cmake ../ && make && make install构建的。

对于测试代码的编译器标志,CMake中使用的命令是add_libarary(mylib SHARED ...)。非CMake有像-fPIC -shared这样的标志,没有什么特别的,因为我还在学习。

EN

回答 1

Stack Overflow用户

发布于 2019-03-19 16:41:11

默认情况下,卤化物应该生成PIC (参见Codegen_Internal.cpp,make_target_machine())。你的目标是什么架构?你在使用什么编译器/链接器,有什么选项,等等?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55234614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档