main.d
import std.stdio;
void main()
{
writeln("Hello World !!!");
}
当我编译并执行它是完美的工作
但是当我尝试
时ldc2 -output-ll main.d
lli main.ll
LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved!
我试试c
#include<stdio.h>
void main()
{
printf("Hello World !!!");
}
和
clang -S -emit-llvm foo.c
lli foo.ll
这是工作!!
为什么在编译宽度ldc ???
时Dlang不起作用答案 0 :(得分:1)
ldc2 -output-ll -betterC main.d
lli -load /usr/lib/libphobos2-ldc.so.72 main.ll
./main
输出 - &gt; Hello World !!!
这是因为
我需要禁用所有需要运行时的功能
http://forum.dlang.org/post/pqujluaxxmtfnoofqkje@forum.dlang.org 谢谢大家和David Nadlinger
答案 1 :(得分:0)
因为cruntime可用于lli。 虽然醉酒时间不是。 如果您将druntime和phobos链接到lli或在启动时加载它将会起作用。
答案 2 :(得分:0)
LLVM错误:程序使用了无法解析的外部函数'_d_throw_exception'!
您需要确定哪个动态库具有此符号,并使用lli -load /path/to/your/library.{so,dylib} ... foo.ll
将其动态链接到您的程序。
我不是D开发人员所以我不需要你的库。要查找库,请查看Dlang distrubution的库。正如Stefan K所说,你可能需要一个负责D运行时的库。
通常,如果您缺少任何符号,则可以在Linux系统上使用
readelf --syms somelib.so
或
objdump --dynamic-syms somelib.so
基于此命令,您可以使用find
编写一个例程,该例程将遍历文件夹,其中包含您怀疑有缺少符号的库,如:
find path-to-dlang-libs-folder -type f ! -name "*.so" -exec objcdump --dynamic-libs -- {} + | grep _start___minfo
您可能需要调整此命令才能在Linux上运行。
答案 3 :(得分:0)
lli -load /usr/lib/libdruntime-ldc-debug.so.72 -load /usr/lib/libphobos2-ldc-debug.so.72 main.ll
我有
LLVM错误:程序使用了无法解析的外部函数“__start___minfo”!