LLVM错误:无法解析外部函数

时间:2014-10-21 08:49:02

标签: c++ c++11 linker llvm llvm-ir

我正在阅读LLVM的Kaleidoscope教程(http://llvm.org/docs/tutorial/index.html)。

我想编译和测试语言。在一些编译器的错误(EngineBuilder和Module的构造函数,链接库......)之后,构建了示例程序。然后,我尝试了这种语言。我在InitializeNativeTargets,DataLayoutPass上遇到了一些问题......但我设法纠正了它们。

但是,我无法解决一个错误。当我写extern printd(x); printd(5);时,程序不起作用:“LLVM ERROR:程序使用的外部函数'printd'无法解析”。

我在网上寻找解决方案。我阅读了很多网页,但没有任何效果。

如何解决此问题?为什么LLVM找不到包含在程序中的外部函数'printd'?提前感谢您的回答。

使用过的代码:https://docs.google.com/document/d/1Qb-zUGaUUIF354uFCXv1iuq8n_rjya6IHDW4WCPWN_4/edit?usp=sharing

.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

我在Ubuntu 14.04 32位上使用GCC 4.8.2,LLVM 3.5和Qt 5.3.1。

1 个答案:

答案 0 :(得分:3)

最后,我在网上找到了一个很棒的链接:http://koichitamura.blogspot.fr/2011/01/since-i-went-to-held-several-weeks-ago.html

错误来自.pro文件中-rdynamic参数的错误位置(-rdynamic必须位于链接选项之后)。你需要这个参数因为(GCC手册页):

  

这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。

我更改了.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

通过这种方式,程序可以正常工作! (该教程的示例运行(http://llvm.org/docs/tutorial/LangImpl6.html#kicking-the-tires))