Как я сказал в комментарии, я думаю, что вы действительно хотите принять решение во время выполнения. Но чтобы ответить на вопрос, который вы задали:
Похоже, вы создаете абстрактный интерфейс для любой оконной системы Vulkan и помещаете различные реализации этого интерфейса в свои собственные разделяемые библиотеки. Вы должны по-разному называть библиотеки, например, libvkwsi-wayland.so
, libvkwsi-xcb.so
.
Обычно люди имеют один исполняемый файл, который решает, какую реализацию использовать, и использует dlopen
для загрузки соответствующей разделяемой библиотеки. Затем вам нужно использовать dlsym
, чтобы получить указатели на функции в этой библиотеке. Если вы используете C ++ и абстрактный интерфейс является буквальным абстрактным базовым классом, то ваши совместно используемые библиотеки будут иметь одну отдельную функцию, которая создает и возвращает экземпляр класса, производного от этого абстрактного класса. Приложение будет вызывать эту фабричную функцию, и с тех пор может просто вызывать виртуальные функции в объекте, как обычно.
Если вы хотите напрямую ссылаться на разделяемую библиотеку (флаг "-l" во время выполнения исполняемой ссылки), то вам нужно иметь отдельный исполняемый файл для оконной системы (myapp-wayland
, myapp-xcb
и т. Д.). В этом случае вам, вероятно, также понадобится сценарий оболочки или Python, который выясняет, какую оконную систему использовать, а затем вызывает правильный исполняемый файл - таким образом, вашим пользователям не нужно знать, какую оконную систему им следует использовать ( хорошо для продвинутых пользователей, не так много для большинства людей).
Использование отдельных исполняемых файлов означает, что вы эффективно распределяете несколько копий всего своего приложения, хотя почти все они, вероятно, идентичны между оконными системами.