У меня проблема с моими глобальными символами. У меня есть класс, который скомпилирован с видимостью по умолчанию (остальная часть кода скрыта) и no-inline. Исполняемый файл также связан с флагом -E. Этот класс вызывается из библиотеки, загружаемой dlopen; поэтому его символы должны быть GLOBAL.Глобальные символы становятся локальными по ссылке
Когда я смотрю на файл .o, все выглядит нормально: FUNC GLOBAL DEFAULT
Однако в конечном двоичном, та же функция превращается в это: FUNC LOCAL DEFAULT
Я думаю, ГЦ-секции вызывает это, и я не могу позволить себе не использовать его. Есть ли способ сказать gc-section игнорировать публичные API?
Вы не предоставили достаточную информацию, чтобы ответить на ваш вопрос. Отсутствуют части: какой компоновщик (золотой или ld), какая версия, какая строка командной строки компоновщика, есть ли скрипты компоновщика, и если да, то что они содержат? –
На данный момент я считаю, что это ошибка компоновщика. В binutils bugzilla есть несколько связанных с gc-разделов ошибок; и я думаю, что ударяю одного из них. Я пробовал одну и ту же линию ссылок с очень новой версией toolchain, и она работала так, как я ожидал. –