Опция LDC2 -I приводит к неразрешенным внешним воздействиям

Я использую последнюю бета-версию LDC2, и при запуске компилятора с параметром -I (ищите также импорт в) он не работает с неразрешенными внешними данными. Это мои команды.

$ ldc2 "source\setup.d" -I "source" -J "build\vars" -of "build\bin\setup.exe" -m32 -g
setup.obj : error LNK2019: unresolved external symbol __D6common17createErrorDialogFxC9ExceptionZv referenced in function __Dmain
setup.obj : error LNK2019: unresolved external symbol __D6common14getConsoleArgsFxPuZAAya referenced in function __D5setup20getAvailableBrowsersFZ14__foreachbody1MFKC3std7windows8registry3KeyZi
setup.obj : error LNK2001: unresolved external symbol __D6common12__ModuleInfoZ
build\bin\setup.exe : fatal error LNK1120: 3 unresolved externals
Error: C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\link.exe failed with status: 1120

Но этот следующий работает нормально, когда я явно говорю компилятору, что setup.d зависит от common.d,

$ ldc2 "source\setup.d" "source\common.d" -J "build\vars" -of "build\bin\setup.exe" -m32 -g

Я использую LDC2 версии 1.12.0-бета2, на DMD v2.082.0, в Windows с VS Build Tools 2017. Любые решения или исправления приветствуются.

Примечание. Эти команды компилятора будут сгенерированы другим кодом, поэтому использование явных имен файлов невозможно.

1 ответ

Решение

-I говорит ему, где найти исходный код для импорта. Предполагается, что фактический объектный код будет найден в предварительно скомпилированной библиотеке (или отдельных файлах.obj) где-то, что вы передаете компоновщику.

Если вы хотите, чтобы он включал файлы в сборку, используя одну из новейших сборок ldc (по состоянию на последние пару месяцев), он также имеет -i в дополнение к -I ты можешь пройти. -I говорит, где найти файлы для импорта. -i говорит ему добавить их в сборку, а не просто обрабатывать их как внешний заголовок библиотеки.

Итак, это ваши три варианта:

  • скомпилируйте библиотеку отдельно и добавьте полученный файл lib к шагу ссылки
  • передать все исходные файлы вместе в командной строке (если он сгенерирован другим кодом, просто измените этот код для обхода каталога lol)
  • получить одну из последних версий компилятора и добавить -i в команду сборки.
Другие вопросы по тегам