Стабильность ABI для указателей на символы по сравнению с обычным поиском символов

Общий сценарий

Используя dlsym(), я динамически загружаю надстройку общего объекта из моего основного потока.

Я следую любому из этих двух способов.

Путь А

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

Путь Б

Пусть аддон вызывает символы по их идентификатору extern "C", а среда выполнения обычно ищет их.

Вопрос

Есть ли разница между этими двумя методами в отношении стабильности ABI? Например: будет ли один из этих методов гарантировать большую вероятность совместимости надстройки с основной программой, если они были скомпилированы в разных средах?


person Community    schedule 17.05.2017    source источник


Ответы (2)


Одним из преимуществ «Пути А» является то, что он дает вам возможность передавать разные указатели на разные плагины. Таким образом, вы можете, например, создать структуру указателей «v1», а затем «v2», которую могут запросить более новые плагины.

person John Zwinck    schedule 17.05.2017

Если что-то работает хорошо, два метода эквивалентны, за исключением некоторой потери производительности. Но поиск во время выполнения разрешает именованные символы в глобальной области видимости, на что может влиять такой флаг, как RTLD_GLOBAL, используемый в dlopen. Это приведет к другому поведению в другом контексте, даже если используется один и тот же аддон.

Поэтому я думаю, что метод А лучше.

person Lw Cui    schedule 17.05.2017