Dlang LLVM ERROR: Program used external function which could not be resolved

Dlang LLVM ERROR: Program used external function which could not be resolved

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

这是工作!!

为什么在 Dlang 中编译 width ldc 时不起作用???

因为 cruntime 对 lli 可用。 而运行时不是。 如果你要 link 将 druntime 和 phobos 放入 lli 或在启动时加载它,它就可以工作。

LLVM ERROR: Program used external function '_d_throw_exception' which could not be resolved!

你需要弄清楚哪个动态库有这个符号,然后 link 使用 lli -load /path/to/your/library.{so,dylib} ... foo.ll 将它动态地添加到你的程序中。

我不是 D 开发人员,所以我不知道您需要什么库。要查找库,请查看 Dlang 发行版的库。正如 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 上工作。

 lli -load /usr/lib/libdruntime-ldc-debug.so.72 -load /usr/lib/libphobos2-ldc-debug.so.72 main.ll

我有

LLVM 错误:程序使用了无法解析的外部函数“__start___minfo”!

    ldc2 -output-ll -betterC main.d

    lli -load /usr/lib/libphobos2-ldc.so.72 main.ll

    ./main

输出 -> Hello World!!!

是因为

我需要禁用所有需要运行时的功能

http://forum.dlang.org/post/pqujluaxxmtfnoofqkje@forum.dlang.org 谢谢大家和 David Nadlinger