J'essaie d'utiliser llvm pour mon projet. J'utilise des en-têtes de llvm et j'ai inclus leur chemin dans le Makefile. J'utilise également certaines bibliothèques llvm (.a), dont j'ai inclus les chemins et les noms dans le fichier makefile. Quand j'exécute le makefile, il construit le code source sans aucun avertissement ou erreur mais quand j'utilise le .so généré pour exécuter un plugin (pour mon projet), j'obtiens l'erreur pour un symbole indéfini:La source se construit sans erreurs/avertissements mais .so erreur "symbole non défini"
undefined symbole: _ZTIN4llvm2cl18GenericOptionValueE
où "_ZTIN4llvm2cl18GenericOptionValueE" est "LLVM :: cl :: GenericOptionValue"
Je construis LLVM suivant les commandes sur https://llvm.org/docs/GettingStarted.html
Cette erreur se produit indépendamment du fait que je le lien entre les bibliothèques llvm ou non. J'ai suivi les documents sur llvm.org mais je n'ai pas eu de succès. Plus précisément - http://releases.llvm.org/2.6/docs/Projects.html et http://releases.llvm.org/2.6/docs/MakefileGuide.html#overvars Le document sur le fichier Makefile LLVM guide mentionne Makefile.config et ce n'est pas présent. Est-ce que nayone a des suggestions?
Le makefile est:
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 [email protected] $^ $(LIB_PATH) $(LIBS)
#
# Build the plugin
#
$(BUILD_DIR)/InOrderPipelineModelFactoryPlugin.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelFactoryPlugin.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/InOrderPipelineModelPlugin.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelPlugin.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/InOrderPipelineModelPluginHandler.o : $(PLUGIN_SRCDIR)/InOrderPipelineModelPluginHandler.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/CAInterface.o : $(PLUGIN_SRCDIR)/CAInterface.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
#
# Build the model
#
$(BUILD_DIR)/InOrder4StagePipeline.o : $(PIPELINE_MODEL_SRCDIR)/InOrder4StagePipeline.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/AArch64Decoder.o : $(PIPELINE_MODEL_SRCDIR)/Utils/AArch64Decoder.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/EventHandler.o : $(PIPELINE_MODEL_SRCDIR)/EventHandler.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/Decode.o : $(PIPELINE_MODEL_SRCDIR)/Components/Decode.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/ExecuteALU.o : $(PIPELINE_MODEL_SRCDIR)/Components/ExecuteALU.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/ExecutionUnit.o : $(PIPELINE_MODEL_SRCDIR)/Components/ExecutionUnit.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/Fetch.o : $(PIPELINE_MODEL_SRCDIR)/Components/Fetch.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/Scoreboard.o : $(PIPELINE_MODEL_SRCDIR)/Components/Scoreboard.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
$(BUILD_DIR)/Write.o : $(PIPELINE_MODEL_SRCDIR)/Components/Write.cpp
$(CXX) $(CXXFLAGS) $^ -o [email protected]
.PHONY: clean
clean:
@rm -rf $(BUILD_DIR)/*.o $(BUILD_DIR)/*.so
Avez-vous vu [ce] (https://stackoverflow.com/questions/14140570/llvm-os-x-symbols-not-found- pour-architecture-x86-64-compile-erreur)? –
Je ne sais pas si cela compte ici, mais notez que les documents que vous regardez sont très vieux (2.6 a été publié en 2009). Votre makefile dit que vous utilisez 3.8. –
@StanislavPankevich Je viens de le voir .. Je ne suis pas sûr de savoir comment utiliser llvm-config. J'ai essayé de suivre les documents sur le site llvm.org mais j'ai encore des doutes. –