Опция 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
в команду сборки.