Как создать заглушки совместно используемые библиотеки в Linux

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

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

Заглушки могут позволять ссылаться на определенную библиотеку без наличия кода, но также для совместимости может быть полезно связать с заглушкой определенной библиотеки. Смотри например В Linux заглушки используются для стандартных библиотек. Зачем нужны заглушки?

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

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

5

Решение

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

Другой подход будет сделать ваш крошечный ПЛАВИТЬСЯ расширение до недавнего НКУ компилятор, который генерирует заглушку (например, в форме C ++ или C) при компиляции реальной библиотеки, или который очищает каждое тело функции (в специальном режиме для компиляции библиотеки только заглушки). Это будет работать для любого языка, скомпилированного GCC (но требует некоторого понимания внутренних компонентов GCC, например, Trees and Gimples). Спросите на gcc-melt@googlegroups.com

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

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector