В glib c, malloc
зависит от низкоуровневого распределителя, такого как sbrk
(или mmap
). Вы, вероятно, можете подделать что-то вроде sbrk
на голой металлической цели, но вам придется потушить все косвенные malloc
зависимости (включая поддержку многопоточности).
glib c * Реализация 1008 * связана с реализацией fopen
, которая зависит от dlopen
для загрузки кода преобразования набора символов (модули gconv
). Это относится даже к статически связанному случаю. В действительности невозможно избежать выхода из динамического компоновщика c без каких-либо далеко идущих изменений.
Инициализация C ++ должна быть довольно простой, чтобы получить правильные результаты, даже для голых железных целей. Я не думаю, что вам нужна какая-либо библиотека lib c для этого, просто немного кода запуска, который соответствует вашим целям. (Для некоторых целей достаточно вызвать функцию magi c _init
перед вашим приложением.) Glib c также имеет некоторые сложные средства для этого, но они предназначены для поддержки динамического c связывания и dlopen
/ dlclose
. Для статически связанных двоичных файлов они не нужны.
Высококачественный порт glib c для не Linux. В операционной системе non-GNU определенно много работы. Если целью является голая железная или не POSIX ОСРВ, вам, вероятно, придется начинать со слоя прокладки POSIX. Даже в этом случае результат будет не совсем «glib» c, и вам все равно понадобится отдельная цепочка инструментов.
Может быть лучше go с newlib (или существующей RTOS lib * 1035) *) и получить недостающую функциональность lib c через gnulib и аналогичные проекты.