Как убрать декорацию функции? Есть библиотека с функцией которая возвращает контейнер. Примерно такая:std::set function();
Библиотеку нужно загружать динамически, значит чтобы найти эту функцию нужно убрать декорацию, как это сделать?extern "C" использовать не получится, так как функция возвращает класс С++. Под Windows вроде можно использовать def файл, но как сделать такое под Linux?

21 Авг 2019 в 06:25
202 +1
3
Ответы
1

Под Linux вы можете использовать атрибут "visibility" для управления видимостью символов при компиляции. Для того чтобы убрать декорацию функции, вам нужно установить видимость символа в "default" или "hidden".

Например, если у вас есть следующая функция:

std::set<std::string> function();

Вы можете использовать атрибут "visibility" следующим образом:

__attribute__((visibility("default"))) std::set<std::string> function();

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

Если вы хотите скрыть символы, кроме определенных функций, вы можете использовать атрибут "visibility" со значением "hidden" и использовать атрибут "visibility" с "default" для функций, которые вы хотите сделать доступными.

Например:

__attribute__((visibility("hidden"))) void hiddenFunction();
__attribute__((visibility("default"))) std::set<std::string> function();

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

20 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир