Опция LDC2 -I приводит к неразрешенным внешним воздействиям - PullRequest
0 голосов
/ 12 октября 2018

Я использую последнюю бета-версию 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 Ответ

0 голосов
/ 12 октября 2018

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

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

Итак, у вас есть три варианта:

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