【发布时间】:2017-10-12 15:13:36
【问题描述】:
我正在尝试将 llvm 用于我的项目。我正在使用来自 llvm 的一些标头,并将它们的路径包含在 Makefile 中。我还使用了某些 llvm 库 (.a),它们的路径和名称已包含在 makefile 中。当我运行 makefile 时,它构建源代码时没有任何警告或错误,但是当我使用生成的 .so 运行插件(对于我的项目)时,我收到未定义符号的错误:
未定义符号:_ZTIN4llvm2cl18GenericOptionValueE
其中“_ZTIN4llvm2cl18GenericOptionValueE”是“llvm::cl::GenericOptionValue”
我按照https://llvm.org/docs/GettingStarted.html上的命令构建llvm
无论我是否链接 llvm 库,都会发生此错误。 我按照 llvm.org 上的文档进行操作,但没有取得任何成功。具体来说 - http://releases.llvm.org/2.6/docs/Projects.html 和 http://releases.llvm.org/2.6/docs/MakefileGuide.html#overvars 关于 LLVM Makefile 指南的文档提到了 Makefile.config 并且不存在。有人有什么建议吗?
makefile 是:
CXXFLAGS=-I$(PVLIB_HOME)/include -I$(PVLIB_HOME)/include/fmruntime -I$(PVLIB_HOME)/include/fmruntime/eslapi \
-I/work/Project1/trunk/work/fastsim/Plugins/include -I/work/llvm/llvm-3.8.0/include -I/work/llvm/build/include/ --std=c++11 -I. -fPIC -c
PLUGIN_SRCDIR=Plugin
PIPELINE_MODEL_SRCDIR=Microarchitecture
BUILD_DIR=build
PLUGIN_UTILS=Utils
LIB_PATH=-L/work/llvm/build/lib
LIBS=-lLLVMSupport -lLLVMAArch64Desc -lLLVMAArch64Disassembler -lLLVMMCDisassembler -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMMC -lLLVMAArch64Utils -ldl
OBJECTS = $(BUILD_DIR)/CAInterface.o $(BUILD_DIR)/InOrderPipelineModelFactoryPlugin.o $(BUILD_DIR)/InOrderPipelineModelPluginHandler.o \
$(BUILD_DIR)/InOrderPipelineModelPlugin.o $(BUILD_DIR)/InOrder4StagePipeline.o \
$(BUILD_DIR)/AArch64Decoder.o $(BUILD_DIR)/EventHandler.o $(BUILD_DIR)/Decode.o $(BUILD_DIR)/ExecuteALU.o \
$(BUILD_DIR)/ExecutionUnit.o $(BUILD_DIR)/Fetch.o $(BUILD_DIR)/Scoreboard.o \
$(BUILD_DIR)/Scoreboard.o $(BUILD_DIR)/Write.o
#
# Build the final plugin
#
$(BUILD_DIR)/InOrderPipelineModel.so: $(OBJECTS)
$(CXX) -shared -o $@ $^ $(LIB_PATH) $(LIBS)
#
# Build the plugin
#
$(BUILD_DIR)/InOrderPipelineModelFactoryPlugin.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelFactoryPlugin.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/InOrderPipelineModelPlugin.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelPlugin.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/InOrderPipelineModelPluginHandler.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelPluginHandler.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/CAInterface.o : $(PLUGIN_SRCDIR)/CAInterface.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
#
# Build the model
#
$(BUILD_DIR)/InOrder4StagePipeline.o : $(PIPELINE_MODEL_SRCDIR)/InOrder4StagePipeline.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/AArch64Decoder.o : $(PIPELINE_MODEL_SRCDIR)/Utils/AArch64Decoder.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/EventHandler.o : $(PIPELINE_MODEL_SRCDIR)/EventHandler.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/Decode.o : $(PIPELINE_MODEL_SRCDIR)/Components/Decode.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/ExecuteALU.o : $(PIPELINE_MODEL_SRCDIR)/Components/ExecuteALU.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/ExecutionUnit.o : $(PIPELINE_MODEL_SRCDIR)/Components/ExecutionUnit.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/Fetch.o : $(PIPELINE_MODEL_SRCDIR)/Components/Fetch.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/Scoreboard.o : $(PIPELINE_MODEL_SRCDIR)/Components/Scoreboard.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
$(BUILD_DIR)/Write.o : $(PIPELINE_MODEL_SRCDIR)/Components/Write.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
.PHONY: clean
clean:
@rm -rf $(BUILD_DIR)/*.o $(BUILD_DIR)/*.so
【问题讨论】:
-
你看到this了吗?
-
不确定这是否重要,但请注意您正在查看的文档非常旧(2.6 于 2009 年发布)。你的 makefile 说你使用的是 3.8。
-
@StanislavPankevich 刚看到.. 我不知道如何使用 llvm-config。我尝试关注 llvm.org 网站上的文档,但仍有疑问。
-
@IsmailBadawi 这些是唯一可用的官方文件