2014-09-03 3 views
5

Давайте сначала объясним, что я имею в виду с общей библиотекой-заглушкой: разделяемая библиотека, которая может использоваться для связи с (с определенным интерфейсом, предоставляемым реальной библиотекой), но не содержит фактический код (поэтому он не имеет функциональности).Как создать общие библиотеки-заглушки в Linux

Наряду с файлами заголовков он предоставляет все необходимое для разработки против библиотеки.

Опоры могут разрешать связывание с определенной библиотекой без наличия кода, но также и для совместимости может быть полезно связать с заглушкой определенной библиотеки. См. Например In Linux stubs are used for standard libraries. Why are stubs required?

В идеале, мне нужен способ создания фиктивной библиотеки из файла карты символов. Этот файл карты, в свою очередь, создается либо из существующей библиотеки .so, либо в том же процессе сборки.

Есть ли инструменты для этого свободно доступного? Или мне нужно катиться самостоятельно?

ответ

2

Я предполагаю, что для простых библиотек C вы можете использовать вывод nm -D в своей общей общей библиотеке, чтобы сделать заглушку. Например, вы можете конвейеру в небольшой awk скрипт, который определяет функции того же имени и т.д.

Другой подход должен был бы сделать свой крошечный MELT расширение до недавнего GCC компилятора, который будет генерировать заглушки (например, в C++ или C) при компиляции реальной библиотеки или очистке каждого тела функции (в специальном режиме для компиляции единственной библиотеки). Это будет работать на любом языке, составленном GCC (но требует некоторого понимания внутренних компонентов GCC, например, Деревья и Gimples). Спросить на [email protected]

Однако я не уверен, что понял практический интерес таких заглушек. На практике в общей библиотеке содержатся некоторые конкретные правила кодирования и их использование, и это не проверяется при использовании заглушек. Чтобы быть конкретным, если вы используете Xlib, вам нужно сначала позвонить XOpenDisplay и XCloseDisplay, и такое правило не может быть проверено с автоматически созданным заглушкой и т. Д.

+0

Я пытаюсь сделать это с помощью огромная библиотека C++, поэтому я боюсь, что простой подход не сработает. И действительно, библиотека не может (разумно) использоваться для проверки чего-либо во время выполнения, это просто для связи. Предоставить интерфейс для ссылки, хотя базовый код может быть другим. – wump

+0

Тогда вы можете рассмотреть подход MELT, то есть настроить GCC (например, очистить каждое тело функции). –

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