Dlang LLVM错误:程序使用无法解析的外部函数

时间:2017-06-14 16:41:45

标签: c llvm cross-compiling d ldc

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不起作用

4 个答案:

答案 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”!