Kaleidoscope 示例代码在 MacOS 上使用 LLVM 编译错误 (8|10)
Kaleidoscope Example Code Compile Errors on MacOS with LLVM(8|10)
编译 kaleidoscope tutorial code 失败并显示 clang++ -g -O3 toy.cpp $(llvm-config --cxxflags) -std=c++17
(如示例所示)并输出以下错误:
Undefined symbols for architecture x86_64:
"llvm::DisableABIBreakingChecks", referenced from:
llvm::VerifyDisableABIBreakingChecks in toy-e1a114.o
ld: symbol(s) not found for architecture x86_64
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
LLVM 与 brew install llvm
(发布此问题时的版本 10)一起安装,后来更改为 brew install llvm@8
。
有趣的是,删除 header llvm/ADT/STLExtras.h
实际上解决了这个问题。但我担心删除它不会是一个通用的解决方案。
我认为问题可能是 $(llvm-config --cxxflags)
在 macOS 中无法正常工作。我不知道 --cxxflags
到底是什么,但我个人遇到了一个问题,即 $(llvm-config --libfiles)
没有 return macOS 中共享库 libLLVM
的正确路径(无论如何,该命令在 Linux 中有效)。
但是,我建议使用 CMake,在使用 LLVM 时无论如何都需要它。下面是从 the LLVM website 复制的示例 CMake 代码。我遵循了这个 CMake 代码,可以在 macOS 中编译我的项目。
cmake_minimum_required(VERSION 3.4.3)
project(SimpleProject)
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
# Set your project compile flags.
# E.g. if using the C++ header files
# you will need to enable C++11 support
# for your compiler.
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
# Now build our tools
add_executable(simple-tool tool.cpp)
# Find the libraries that correspond to the LLVM components
# that we wish to use
llvm_map_components_to_libnames(llvm_libs support core irreader)
# Link against LLVM libraries
target_link_libraries(simple-tool ${llvm_libs})
编译 kaleidoscope tutorial code 失败并显示 clang++ -g -O3 toy.cpp $(llvm-config --cxxflags) -std=c++17
(如示例所示)并输出以下错误:
Undefined symbols for architecture x86_64:
"llvm::DisableABIBreakingChecks", referenced from:
llvm::VerifyDisableABIBreakingChecks in toy-e1a114.o
ld: symbol(s) not found for architecture x86_64
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
LLVM 与 brew install llvm
(发布此问题时的版本 10)一起安装,后来更改为 brew install llvm@8
。
有趣的是,删除 header llvm/ADT/STLExtras.h
实际上解决了这个问题。但我担心删除它不会是一个通用的解决方案。
我认为问题可能是 $(llvm-config --cxxflags)
在 macOS 中无法正常工作。我不知道 --cxxflags
到底是什么,但我个人遇到了一个问题,即 $(llvm-config --libfiles)
没有 return macOS 中共享库 libLLVM
的正确路径(无论如何,该命令在 Linux 中有效)。
但是,我建议使用 CMake,在使用 LLVM 时无论如何都需要它。下面是从 the LLVM website 复制的示例 CMake 代码。我遵循了这个 CMake 代码,可以在 macOS 中编译我的项目。
cmake_minimum_required(VERSION 3.4.3)
project(SimpleProject)
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
# Set your project compile flags.
# E.g. if using the C++ header files
# you will need to enable C++11 support
# for your compiler.
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
# Now build our tools
add_executable(simple-tool tool.cpp)
# Find the libraries that correspond to the LLVM components
# that we wish to use
llvm_map_components_to_libnames(llvm_libs support core irreader)
# Link against LLVM libraries
target_link_libraries(simple-tool ${llvm_libs})