У меня проблема с моими глобальными символами. У меня есть класс, который скомпилирован с видимостью по умолчанию (остальная часть кода скрыта) и без встроенного. Исполняемый файл также связан с флагом -E. Этот класс вызывается из библиотеки, которая загружается dlopen; поэтому его символы должны быть глобальными.
Когда я смотрю на файл .o, все выглядит хорошо:
FUNC GLOBAL DEFAULT
Однако в конечном двоичном коде та же самая функция превращается в это:
FUNC МЕСТНЫЙ ПО УМОЛЧАНИЮ
Я думаю, что это вызывает gc-section, и я не могу позволить себе не использовать его. Есть ли способ сказать gc-разделам игнорировать общедоступные API?
Однако в конечном двоичном коде та же самая функция превращается в следующее: FUNC LOCAL DEFAULT
Скорее всего, это происходит потому, что в командной строке компоновщика есть что-то, что говорит компоновщику сделать это. Возможно, у вас есть скрипт версии компоновщика, который делает это?
Я думаю, что gc-section вызывает это
Это предположение очень маловероятно.