
Я столкнулся с ошибкой при запуске gcc
команды на машине Linux, и, погуглив ошибку, я обнаружил, что люди говорят, что она была исправлена в более новой версии библиотеки bfd
. Поискав дальше, я обнаружил, что это bfd
может быть статическая библиотека, с которой она gcc
была связана при сборке, а не общая динамическая библиотека, но я в этом не уверен.
Как узнать, gcc
использует ли моя версия bfd
статически или динамически и какую версию bfd
?
решение1
BFD — это библиотека, используемая программами, составляющими Binutils GNU, в том числе ld
, gold
, и as
, среди прочих. Обычно они входят в пакет с названиемbinutilsиbinutils-dev(Debian и друзья) илиbinutils-разработка(Fedora/RHEL). Вы можете запустить любую из вышеупомянутых программ с -V
переключателем, чтобы получить ее номер версии. Вы можете использовать readelf
для перечисления их зависимостей. Для перечисления зависимостей, ld
включая их типы:
readelf -d `which ld`
Dynamic section at offset 0xc900c contains 28 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libbfd-2.22-system.so]
0x00000001 (NEEDED) Shared library: [libz.so.1]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]
Я не очень хорошо знаком с внутренним устройством GCC, но я бы сказал, что странно думать, что GCC когда-либо связывали с BFD.