У меня есть две общие библиотеки в Linux, которые при сборке идентичны во всех отношениях, за исключением того, что одна из функций, предоставляемая каждой из них, имеет другой интерфейс (одна принимает некоторые типы массивов сторонних производителей, а другая - строки). Я могу собрать обе версии совместно используемой библиотеки, и мне было интересно, есть ли способ вставить метаинформацию в саму разделяемую библиотеку (очень похоже на то, как вы можете вставлять комментарии / название компании / и т. Д. Во время сборки в DLL) , который может быть запрошен во время выполнения).
Я не хочу называть два вида файлов .so по-разному, потому что они на самом деле одно и то же, и они являются взаимозаменяемыми частями большей системы. Мне нужен мой код, который выполняет dlopen и dlsym в библиотеке, чтобы знать, какой это вариант, чтобы у него был правильный интерфейс.
Глупый способ, которым я сейчас занимаюсь, - это добавить функцию no-op под названием «Flavor_A» в одном и «Flavor_B» в другом. Затем я делаю Flavor_A или Flavor_B, чтобы проверить, с какой общей библиотекой я имею дело. Если я верну NULL, я знаю, что Flavor_X не существует, и в этом случае это должен быть другой вариант.
Я полагаю, должен быть лучший способ. Вот почему я здесь.
У кого-нибудь есть предложения о том, как встроить некоторую информацию, запрашиваемую во время выполнения, в сам двоичный файл .so?
Спасибо.