Мы как-то уже упоминали о том, что с D можно работать прямо на смартфоне, поскольку есть замечательный компилятор LDC. Но, в последнее время, мы столкнулись с тем, что несмотря на наличие свежих пакетов для LDC в Termux, компиляция любых проектов кончается непонятными ошибками.
Наша команда довольно давно отписалась о проблеме в баг-трекер Termux, а ответ получили примерно месяц назад и вот сейчас мы поведаем о том, что можно сделать, чтобы продолжать разрабатывать на своем смартфоне.
Начнем с того, что опишем, что за ошибки возникают.
Берем обычный Hello, world на D с минимальным набором зависимостей:

вызываем компиляцию с помощью ldc и видим сообщением об ошибке с таким примерно текстом:
clang-15: error: linker command failed with exit code code 1 (use -v to see invocation)
Выглядит это в нашем случае так:

Причина ошибки, как пояснили разработчики, связана с тем, что с некоторых пор для линковки при сборке исполняем файлов и библиотек в Termux применяется не линкер ld, а bfd (если не ошибаемся). Также разработчики посоветовали применить флаг указания в качестве линкера bfd и указали, что проблему решить нельзя…
Но спустя некоторое время, мы неожиданно получили ответ от пользователя на GitHub с никнеймом Inkrementator, в котором он советует применить флаг -linker=ld или внести изменения в файл конфигурации ldc2, путь до которого — $PREFIX/etc/ldc2.conf. В качестве решения требуется открыть файл с помощью редактора (к примеру, стандартным nano):
nano $PREFIX/etc/ldc2.conf
Найти строки, в которых есть вот этот блок:
default: { // default switches injected before all explicit command-line switches switches = [ "-defaultlib=phobos2-ldc,druntime-ldc", "-link-defaultlib-shared=false", "-linker=ld", // line 23, "-linker="->"-linker=ld" ];
и в строке 23 заменить «-linker=ld» на «-linker=»->»-linker=ld»:

После этого, все без проблем компилируется, к примеру тот же Hello, world без каких-либо флагов:

Такой вот неожиданый рецепт мы нашли для вас. От всей команды блога выражаем большое спасибо пользователю Inkrementator, а также большое спасибо всем кто читает наши статьи. 🙂