Каждая программа, которую я создаю с помощью dmd, вылетает с ошибкой - PullRequest
3 голосов
/ 23 февраля 2020

Каждая отдельная D-программа, которую я компилирую с dmd, аварийно завершает работу с segfault, когда я запускаю их.

Я все больше и больше убираю из программы, которую я пишу, чтобы получить самую маленькую программу, которая делает это и это

void main() {}

взломает sh с segfault.

Я не использовал D или dmd в течение нескольких недель, но, как я заметил, он работал нормально. В то время я не обновлял и не изменял dmd и не могу думать о каких-либо других изменениях или обновлениях, которые могли бы повлиять на dmd.

С тех пор, как выяснилось, что это происходило с dmd, я переустановил операционную систему и все программное обеспечение и то же поведение сохраняется.

Я попытался собрать dmd из исходного кода, но первое, что он делает, это запускает программу ../generated/build, но это программа на D, поэтому она вылетает.

Это также происходит, если я dub init создаю новый проект, dub build и запускаю вывод. Это не просто вызов с использованием одного только dmd, который создает исполняемые файлы, которые создают sh.

. Я пытался вернуться к прежним версиям dmd, версиям, которые, я уверен, успешно использовал раньше, и программам, созданным с теперь они также создают sh, где раньше не создавали sh.

В дистрибутиве Linux есть lxle, но / etc / os-release идентифицирует систему как Ubuntu 18.04.4 LTS.

Буду очень признателен за любую помощь или идеи о том, что вызывает такое поведение и как его исправить.

Спасибо.

Редактировать

ldd показывает

linux-gate.so.1 (0xb7f4b000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7e7c000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb7e72000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7e54000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7c78000)
/lib/ld-linux.so.2 (0xb7f4d000)

Я не знаю, является ли это типичным, но перечисленные там файлы существуют или являются символическими ссылками на существующие файлы.

break main и run в gdb дает

Starting program: /home/ant/dtest/dtest 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00448865 in _D2rt19sections_elf_shared10_tlsRangesFNbNcNdNiZSQBv4util9container5array__T5ArrayTAvZQk ()

, но я не знаю, что делать с этой информацией.

...