LLVM错误:无法解析外部函数
LLVM Error : External function could not be resolved
我正在阅读LLVM的万花筒教程(http://llvm.org/docs/tutorial/index.html)。
我想编译和测试这种语言。在一些编译器错误(EngineBuilder和Module的构造函数,链接libs…)之后,构建了示例程序。然后,我尝试了这种语言。我在InitializeNativeTargets、DataLayoutPass方面遇到了一些问题。。。但我设法纠正了它们。
但是,我没能解决一个错误。当我写extern printd(x); printd(5);
时,程序不工作:"LLVM错误:程序使用了无法解析的外部函数'printd'"。
我在网上寻找解决方案。我看了很多网页,但都没用。
我该如何解决这个问题?为什么LLVM找不到程序中包含的外部函数"printd"?提前感谢您的回答。
使用的代码:https://docs.google.com/document/d/1Qb-zUGaUUIF354uFCXv1iuq8n_rjya6IHDW4WCPWN_4/edit?usp=sharing
.pro文件(Qt创建者):
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。
最后,我在网上找到了一个很棒的链接:http://koichitamura.blogspot.fr/2011/01/since-i-went-to-held-several-weeks-ago.html.
错误来自.pro文件中-rdynamic
参数的错误位置(-rdynamic
必须在链接选项之后)。你需要这个论点,因为(GCC手册页):
这指示链接器将所有符号(而不仅仅是已使用的符号)添加到动态符号表中。
我更改了.pr文件:
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-轮胎))
- 调用外部函数,无法指定类型 C++/MVS
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- add_cuda_library输出:未解析的外部函数
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- 如何在Windows Media Foundation中获取相机外部函数?
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- antlr cpp target 的标头部分不允许使用具有默认参数的外部函数
- 将多维数组传递给外部"C"函数为 void *
- llvm 调用一个以 char * 作为参数的外部函数
- 将 std::vector<bool> 传递给外部函数
- 如何在类向量中存储/使用外部函数指针
- LLVM - 如何使嵌套函数看到外部函数的变量
- CUDA9.2及以上版本中模板默认参数存在无法解决的外部函数错误
- 宏导入外部函数
- 如何在LLVM Pass中将字符串传递给外部函数
- C++:是否可以区分外部"C"函数和普通函数?
- 从外部函数访问外部结构属性
- 如何将成员声明为指向外部"C"函数的指针?
- C 将外部函数链接为成员函数
- LLVM JIT编译的程序找不到外部函数