Глобальные символы становятся локальными при ссылке

У меня проблема с моими глобальными символами. У меня есть класс, который скомпилирован с видимостью по умолчанию (остальная часть кода скрыта) и без встроенного. Исполняемый файл также связан с флагом -E. Этот класс вызывается из библиотеки, которая загружается dlopen; поэтому его символы должны быть глобальными.

Когда я смотрю на файл .o, все выглядит хорошо:
FUNC GLOBAL DEFAULT

Однако в конечном двоичном коде та же самая функция превращается в это:
FUNC МЕСТНЫЙ ПО УМОЛЧАНИЮ

Я думаю, что это вызывает gc-section, и я не могу позволить себе не использовать его. Есть ли способ сказать gc-разделам игнорировать общедоступные API?

0

Решение

Однако в конечном двоичном коде та же самая функция превращается в следующее: FUNC LOCAL DEFAULT

Скорее всего, это происходит потому, что в командной строке компоновщика есть что-то, что говорит компоновщику сделать это. Возможно, у вас есть скрипт версии компоновщика, который делает это?

Я думаю, что gc-section вызывает это

Это предположение очень маловероятно.

0

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


По вопросам рекламы [email protected]