Dlang LLVM ERROR: программа использовала внешнюю функцию, которая не может быть решена

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!

Я пытаюсь в т

#include<stdio.h>

void    main()
{
  printf("Hello World !!!");
}

а также

clang -S -emit-llvm foo.c

lli foo.ll

это работа!!

Почему в Dlang не работает, когда я компилирую ширину LDC?

4 ответа

Решение

Потому что время доступно для lli. В то время как пьяное время нет. Если бы вы связали druntime и phobos в lli или загрузили его при запуске, это сработало бы.

    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 Спасибо всем и Дэвиду Надлингеру

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

и я имею

ОШИБКА LLVM: Программа использовала внешнюю функцию __start___minfo, которая не может быть решена!

ОШИБКА LLVM: Программа использовала внешнюю функцию _d_throw_exception, которая не может быть решена!

Вам нужно выяснить, какая динамическая библиотека имеет этот символ и динамически связать его с вашей программой, используя lli -load /path/to/your/library.{so,dylib} ... foo.ll,

Я не разработчик D, поэтому я не знаю, какая библиотека вам нужна. Чтобы найти библиотеку, посмотрите на библиотеки вашего дистрибутива Dlang. Как сказал Стефан К, вам, вероятно, нужна библиотека, отвечающая за время выполнения 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, хотя.

Другие вопросы по тегам