2015-02-01 3 views
1

Я работаю над очень низкой встроенной системой ресурсов, используя ядро ​​linux в качестве ОС. Существуют любые дистрибутивы или POSIX/GNU toolchain, только ядро, загруженное в память, и пользовательский процесс инициализации.Статическая ссылка ld.so (ld.a?)

До сих пор я использовал статически связанные двоичные файлы, но теперь мне тоже нужны общие объекты. Чтобы сохранить простоту и сохранить ресурсы, мне нужна ld.so функциональность, статически связанная внутри каждого двоичного файла.

Существует какое-либо портативное решение, которое позволяет мне статически связывать общий загрузчик объектов внутри моего приложения?

ответ

1

Вы, вероятно, необходимо статически libdl.so, то есть некоторые (гипотетический) libdl.a (что, вероятно, потребует разделяемая библиотека загружена ld.so)

Но я думаю, что вы должны рассмотреть другой способ, например, используя небольшой musl-libc, который предоставляет свои собственные libdl и т. д. Вы, вероятно, можете его настроить (так что с помощью мульты libc.so с учетом ваших потребностей) должны содержать только файлы объектов и API, которые вам нужны.

+0

Я просто задал этот вопрос в мультовой комнате чата, и кто-то указал, что в статическом бинарнике уже есть бит libc, но не все. И, скорее всего, загруженной библиотеке понадобятся недостающие бит. Я попробовал статическую ссылку с dlopen с муслисом и получил «dlopen failed: Dynamic loading not supported». –

+0

Решено использовать 'musl', но вы должны скомпилировать динамически. 'libc.so' содержит все необходимые символы, поэтому вы должны установить его как динамический компоновщик в файле' gcc.specs'. – user3368561

Смежные вопросы