Clang++ 编译 mlir-toy ch1 失败

问题描述 投票:0回答:1

我想编译mlir-toy Chapter1。地址是:https://mlir.llvm.org/docs/Tutorials/Toy/Ch-1/ 源代码可以在这里找到:https://github.com/llvm/clangir/blob/main/mlir/examples/toy/Ch1/toyc.cpp 我本地的 CMakeLists.txt 是:

cmake_minimum_required(VERSION 3.20)
project(mlir-toy VERSION 0.0.0)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)

find_package(MLIR REQUIRED CONFIG)
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")

include(TableGen)
include(AddLLVM)
include(AddMLIR)
include(HandleLLVMOptions)

set(MLIRTOY_SRC_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)

include_directories(${LLVM_INCLUDE_DIRS} ${MLIR_INCLUDE_DIRS} ${MLIRTOY_SRC_INCLUDE_DIR})
add_executable(mlir-toy src/main.cpp src/AST.cpp)
target_link_libraries(mlir-toy PRIVATE MLIRSupport)

但是我构建失败了。 编译信息是:

/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl3optIN12_GLOBAL__N_16ActionELb0ENS0_6parserIS3_EEEE+0x18): undefined reference to `typeinfo for llvm::cl::Option'
/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl6parserIN12_GLOBAL__N_16ActionEEE+0x10): undefined reference to `typeinfo for llvm::cl::generic_parser_base'
/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl15OptionValueCopyIN12_GLOBAL__N_16ActionEEE+0x10): undefined reference to `typeinfo for llvm::cl::GenericOptionValue'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

我的 clang++ 版本是:

Ubuntu clang version 17.0.6 (++20231128094036+6009708b4367-1~exp1~20231128094051.72)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

我在以下位置下载 llvm-project:https://github.com/llvm/llvm-project 构建 mlir 并将其安装在:mlir-toy/install 我想成功构建 mlir-toy!

c++ llvm clang++
1个回答
0
投票

这对我有用

# run from root of llvm-project repo
build_llvm=build-llvm
build_mlir=build-mlir
installprefix=install
mkdir -p $build_llvm
mkdir -p $installprefix

cmake -G Ninja -S llvm -B $build_llvm \
      -DLLVM_INSTALL_UTILS=ON \
      -DCMAKE_INSTALL_PREFIX=$installprefix \
      -DCMAKE_BUILD_TYPE=Release

ninja -C $build_llvm install

cmake -G Ninja -S mlir -B $build_mlir \
      -DLLVM_EXTERNAL_LIT=$build_llvm/utils/lit \
      -DLLVM_ROOT=$installprefix

cmake --build $build_mlir --target Toy
build-mlir/bin/toyc-ch1 mlir/test/Examples/Toy/Ch1/ast.toy -emit=ast
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.