Как добавить новые исходные файлы в make-файл glibc? - PullRequest
0 голосов
/ 17 ноября 2018

Недавно я заинтересовался изучением управления кучей в C (модуль malloc).Я хочу разбить исходные файлы malloc (например, malloc.c, arena.c) на более мелкие файлы, чтобы их было легче читать и изучать.Я использую glibc 2.23 и успешно собрал его локально (в отдельной папке "build") на Ubuntu 14.04, следуя инструкциям в вики.

В качестве моей первоначальной попытки я поставил __malloc_assertв файлы massert.h и massert.c, но потом понял, Я понятия не имею, как добавить их в make-файлы, чтобы они могли быть скомпилированы и связаны .

Так как я переехал __malloc_assertиз malloc.c я получил ошибки связи при повторном запуске make, что ожидалось:

/home/mvs/git/glibc/build/libc_pic.os: In function `detach_arena':
/home/mvs/git/glibc/malloc/arena.c:629: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/build/libc_pic.os: In function `mremap_chunk':
/home/mvs/git/glibc/malloc/malloc.c:2832: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2813: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2812: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2830: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/build/libc_pic.os:/home/mvs/git/glibc/malloc/malloc.c:2776: more undefined references to `__malloc_assert' follow

Я подумал, что мне следует посмотреть, как malloc/malloc.c используется в make-файлах, но яне мог найти где это используется.В основном я смотрю на следующие файлы:

  • glibc / Makeconfig
  • glibc / Makefile
  • glibc / Rules
  • glibc / malloc /Makefile

Кроме того, я искал список рассылки makefile в libc-help и просмотрел все результаты, но не нашел того, который соответствует тому, что я хочу.Два из потоков, "glibc + add new function" и "Добавление функции в glibc?" , говорили о добавлении новой функции в библиотеку, что не в моем случае(Я не добавляю новую функцию, а просто реструктурирую код).

Я новичок в системе makefile и все еще читаю руководство по сборке GNU, но мысль о том, что снятие электронной почты здесь может вывести меня из себяборьба быстрее.

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Вам необходимо добавить massert (не massert.c) к переменной routines в malloc/Makefile.

Существует несколько таких переменных: routines для libc само по себе,но есть также libm-routines для libm и т. д.

По умолчанию эти исходные файлы создаются для всех вариантов: статический (.o), общий (.os), профилирующий (.op, профилирование по умолчанию отключено).Некоторые специальные функции предназначены только для статических сборок (.oS, они входят в libc_nonshared.a) и перечислены также в static-only-routines.Определенные цели сборки можно исключить с помощью переменной elide-routines.os.

...