Компиляция GCC с использованием пользовательского GLIBC

Это специфичная для NIC -или драйвера -расширенная статистика, поэтому важно знать тип используемого сетевого интерфейса и/или имя используемого с ним модуля драйвера.

Однако, по крайней мере, в версии ядра 4.14.85 строка tx_lost_interruptпоявляется только в драйвере сетевой карты Intel i40e. Кажется, это патч, изначально добавлявший эту статистику в драйвер.

Похоже, что он подсчитывает количество применений программного обходного решения в случае потери аппаратного прерывания. Я не смог найти никакого дальнейшего описания, но мне кажется, что это обходной путь для аппаратной ошибки сетевой карты...


rx_alloc_fail, с другой стороны, похоже, указывает, сколько раз драйверу не удалось выделить буфер памяти для полученных пакетов (с ). Это может указывать на то, что ваша система испытывает нехватку памяти и может использовать больше оперативной памяти.

1
07.02.2020, 10:31
2 ответа

Согласно Руководству по Autoconf в системе сборки GNU флаги/параметры компилятора/компоновщика передаются через скрипт configure. Итак, в моем случае я должен настроить, скомпилировать и установить следующим образом:

$ GLIBCDIR=/home/sfinix/programming/repos/glibc/glibc-install/
$ LDFLAGS="-Wl,-q"
$ CFLAGS="-L ${GLIBCDIR}/lib -I ${GLIBCDIR}/include -Wl,--rpath=${GLIBCDIR}/lib -Wl,--dynamic-linker=${GLIBCDIR}/lib/ld-linux-x86-64.so.2"
$ mkdir ~/gcc-build
$ cd ~/gcc-build'
$ ~/gcc-src/configure --prefix=~/gcc-install CFLAGS=${CFLAGS} CXXFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS}
$ make && make install

В сценарии конфигурации я передал только те переменные/параметры, которые имеют отношение к заданному вопросу. Вы можете передать больше параметров в соответствии с вашими конкретными потребностями. Вы можете просмотреть все параметры и допустимые переменные, запустив ~/gcc-src/configure --help. Вы также можете передавать флаги через переменные среды, но вы должны установить их перед запуском скрипта configure.

0
28.04.2021, 23:24

Ответьте на заданный вопрос.

Не видя Makefile, невозможно сказать, какие переменные, если таковые имеются, используются на последнем этапе компоновки. CFLAGSи LDFLAGSявляются широко поддерживаемыми соглашениями , но не являются обязательными. OP сообщает нам в комментариях, что Makefile«огромный» и, возможно, генерируется автоматически. В настоящее время в GNU Make есть опции -O --trace, поэтому можно найти команду, используемую для выполнения последней ссылки, и либо запустить шаг вручную с нужными изменениями, либо использовать информацию, чтобы увидеть, где в make-файле находится команда. вызывается и работает оттуда, чтобы найти, что нужно отредактировать или установить, чтобы получить желаемый шаг ссылки.

Альтернативный подход

Вывод readelf -dпоказывает нам, что в исполняемом файле отсутствует RPATHили RUNPATH, указывающий на нужные библиотеки. Поскольку библиотеки, с которыми требуется связать, представляют собой пользовательскую версию glibc, вероятно (, но не обязательно ), что они будут иметь тот же API, что и glibc, который фактически используется для связи. При таком предположении двоичный файл можно отредактировать, чтобы добавить отсутствующий RUNPATH. Подходящей программой для этого является patchelf , которая упакована для различных дистрибутивов Linux.

ОП сообщил об успешном выполнении

patchelf --set-rpath ${GLIBCDIR}/lib --set-interpreter ${GLIBCDIR}/lib/ld-linux-x86-64.so.2 ${GCCDIR}/bin/gcc-9.2
1
28.04.2021, 23:24

Теги

Похожие вопросы