Erreur LLVM: la fonction externe n’a pas pu être résolue

Je lis le didacticiel Kaleidoscope de LLVM ( http://llvm.org/docs/tutorial/index.html ).

Je voulais comstackr et tester le langage. Après quelques erreurs de compilation (EngineBuilder et le constructeur de Module, reliant libs …), l’exemple de programme a été construit. Ensuite, j’ai essayé la langue. J’ai eu quelques problèmes avec InitializeNativeTargets, DataLayoutPass … Mais j’ai réussi à les corriger.

Cependant, je ne parviens pas à résoudre une seule erreur. Quand j’écris extern printd(x); printd(5); extern printd(x); printd(5); , le programme ne fonctionne pas: “ERREUR LLVM: le programme utilisait une fonction externe ‘printd’ qui ne pouvait pas être résolue”.

J’ai cherché la solution sur le net. J’ai lu beaucoup de pages Web, mais rien n’a fonctionné.

Comment puis-je résoudre ce problème? Pourquoi LLVM ne parvient pas à trouver la fonction externe ‘printd’, incluse dans le programme? Merci d’avance pour votre réponse.

Le code utilisé: https://docs.google.com/document/d/1Qb-zUGaUUIF354uFCXv1iuq8n_rjya6IHDW4WCPWN_4/edit?usp=sharing.

Le fichier .pro (Qt Creator):

 QT += core QT -= gui TARGET = Kaleidoscope CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp INCLUDEPATH += /home/alainetflo/Documents/me/C++/LLVM/llvm-3.5.0.src/include DEPENDPATH += /home/alainetflo/Documents/me/C++/LLVM/llvm-3.5.0.src/include LIBS += `llvm-config --ldflags --libs all --system-libs` -Wl,-no-as-needed QMAKE_CFLAGS += -m32 QMAKE_CXXFLAGS += -rdynamic -std=c++11 -O3 

J’utilise GCC 4.8.2, LLVM 3.5 et Qt 5.3.1 sur Ubuntu 14.04 32bits.

Enfin, j’ai trouvé un excellent lien sur le net: http://koichitamura.blogspot.fr/2011/01/since-i-went-toheld-several-weeks-ago.html .

L’erreur provenait du mauvais emplacement de l’argument -rdynamic dans le fichier .pro ( -rdynamic doit figurer après les options de liaison). Vous avez besoin de cet argument car (page de manuel GCC):

Cela indique à l’éditeur de liens d’append tous les symboles, et pas seulement ceux utilisés, à la table de symboles dynamic.

J’ai changé le fichier .pro:

 QT += core QT -= gui TARGET = Test01 CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp INCLUDEPATH += /home/alainetflo/Documents/me/C++/LLVM/llvm-3.5.0.src/include DEPENDPATH += /home/alainetflo/Documents/me/C++/LLVM/llvm-3.5.0.src/include INCLUDEPATH += /usr/include/i386-linux-gnu/c++/4.8 \ /usr/include/c++/4.8 LIBS += `llvm-config --ldflags --libs all --system-libs` -Wl,-no-as-needed -rdynamic QMAKE_CFLAGS += -m32 QMAKE_CXXFLAGS += -g -std=c++11 -O3 

De cette façon, le programme fonctionne sans erreur! (L’exemple du tutoriel s’exécute ( http://llvm.org/docs/tutorial/LangImpl6.html#kicking-the-tires ))