Проблема в том, что clang-1000.11.45.2
распространяется с Apple LLVM version 10.0.0
и добавляет новую команду загрузки в исполняемые файлы o-mach с именем LC_BUILD_VERSION
.
$ otool -l test.o
...
Load command 1
cmd LC_BUILD_VERSION
cmdsize 24
platform macos
sdk n/a
minos 10.14
ntools 0
...
Из источника apple :
/*
* The build_version_command contains the min OS version on which this
* binary was built to run for its platform. The list of known platforms and
* tool values following it.
*/
Так что в настоящее время bfd
(программа, используемая gdb для манипулирования исполняемыми файлами) не может интерпретировать эту команду и возвращает ошибку.
Временное решение, которое я нашел, напрямую редактируетсяbfd
источники предоставляют gdb
.Я тестировал только с gdb-8.0.1
.
Сначала загрузите gdb-8.0.1
источников с зеркал .Затем добавьте к gdb-8.0.1/bfd/mach-o.c
следующий код в строке 4649
:
case BFD_MACH_O_LC_BUILD_VERSION:
break;
И, наконец, добавьте int gdb-8.0.1/include/mach-o/loader.h
:
BFD_MACH_O_LC_BUILD_VERSION = 0x32
в строке 189
(нене забудьте добавить ,
в конце строки 188 после BFD_MACH_O_LC_VERSION_MIN_WATCHOS = 0x30
).
После этих инструкций вы можете следовать классической компиляции gdb
, как указано в README:
run the ``configure'' script here, e.g.:
./configure
make
To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
make install
Не забудьте подписать gdb
как объясните здесь .Если вы по-прежнему получаете сообщение об ошибке (0/5) (os / kern), просто запустите sudo gdb
.
Это временное решение, ожидающее, пока команда GNU исправит проблему непосредственно в репозитории.
РЕДАКТИРОВАТЬ
Binutils-gdb
был обновлен, эти изменения теперь реализованы в коммите fc7b364 .
Надеюсь, что это будет полезно.