我目前正在学习LLVM。我正在关注《LLVM Essentials》。在“Creating an LLVM Moudle”中有这样的内容:
static llvm::LLVMContext context;
Module *module = new Module("Module",context);
module->dump();.
编译后我最终得到了
Undefined symbols for architecture arm64:
"llvm::Module::dump() const", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture arm64` .
我使用的是 macOS 12.0.1,并且我使用 homebrew 安装 llvm-17。我还使用 clion 作为我的 IDE,cmake 配置为:
cmake_minimum_required(VERSION 3.16)
project(Demo)
set(CMAKE_CXX_STANDARD 17)
find_package(LLVM REQUIRED)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
include_directories(${LLVM_INCLUDE_DIRS})
link_directories(${LLVM_LIBRARY_DIRS})
#separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
#add_definitions(${LLVM_DEFINITIONS_LIST})
llvm_map_components_to_libnames(llvm_libs support core irreader)
add_executable(Demo main.cpp)
target_link_libraries(Demo ${llvm_libs})
代码是:
#include <iostream>
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Verifier.h"
using namespace llvm;
static llvm::LLVMContext context;
int main() {
static IRBuilder<> Builder(context);
Module *module = new Module("Module",context);
module->dump(); //?? why this not working??
//This works well: module->print(llvm::errs(), nullptr);
return 0;
}
如果您知道问题是什么,请帮助我。而且我无法像
module->dump();
那样去实现LLVM函数,我只能看到定义。这是为什么?我上网查了下,可能是llvm处于release模式?