• XSS.stack #1 – первый литературный журнал от юзеров форума

Кросскомпиляция D c Линуксов на Венды

DildoFagins

TPU unit
Забанен
Регистрация
11.08.2020
Сообщения
4 315
Решения
2
Реакции
5 265
Пожалуйста, обратите внимание, что пользователь заблокирован
Небольшая заметка в догонку: https://xss.pro/threads/76417/#post-528584

Я, как знатный красноглазик, предпочитаю разрабатывать на Линуксах. Для Цэ и Плюсов все довольно просто: ставишь mingw нужной версии из официальных репозиториев своего любимого дистрибутива и херачишь код в свое удовольствие. Но что делать, скажем с Дэ. Я решил посмотреть. Для начала нам нужно поставить ldc2 и lld (LLVM'ый линкер) из официальных репозиториев, или с гитхаба. Не знаю, так ли необходимо, чтобы версия LLVM библиотек в LDC и LLD совпадала, но я на Арче, поэтому у меня они совпали (ай юз арч бтв). Затем, нам нужно скачать соответвующей версии сборку LDC под Венду с гитхаба (берем мультилиб): https://github.com/ldc-developers/ldc/releases - она нужно для всяческих либ файлов. Копируем директории lib32 и lib64 туда, куда ранее поставили LDC, ну или вообще в произвольную папку, но потом нам надо будет ее подпихнуть линкеру, чтобы последний нашел необходимые либы. Немножко корректируем аргументы командной строки и вуаяля, все работает:
C-подобный:
import core.sys.windows.winuser;
import core.sys.windows.winbase;

extern (C) void EntryPoint() {
    MessageBoxA(null, "Hello World", null, MB_OK);
    ExitProcess(0);
}
Bash:
ldc2 -of=./test32.exe -mtriple=i686-windows-msvc   -betterC -O3 --boundscheck=off --flto=full -L=/nodefaultlib -L=/entry:EntryPoint -L=/subsystem:console -L=/libpath:./lib32 -L=kernel32.lib -L=user32.lib ./test.d
ldc2 -of=./test64.exe -mtriple=x86_64-windows-msvc -betterC -O3 --boundscheck=off --flto=full -L=/nodefaultlib -L=/entry:EntryPoint -L=/subsystem:console -L=/libpath:./lib64 -L=kernel32.lib -L=user32.lib ./test.d
rm ./test32.obj
rm ./test64.obj
wine ./test32.exe
wine ./test64.exe

По сути у нас '-m32' и '-m64' поменялись на соответствующий параметр '-mtriple', ну и мы подпихнули линкеру пути, где искать библиотеки (-L=/libpath:<путь>). Для полноценной разработки на Дэ (не без рантайма и не -betterC) все должно выглядеть примерно также, да и упаковать все эти параметры в dub (система сборки проектов и управления зависимостями в Дэ) тоже должно быть довольно просто. Эту заметку в основном оставляю для себя, но может кому еще пригодиться.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
пробывал в LDC так
Так и чего? Получилось, не получилось, о чем ты?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх