Изменение видимости символов и объектов после компиляции в gcc в Linux - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь привязать адреса скрытых переменных символов и объектов виртуальной таблицы C ++ и экспортировать их в динамическую библиотеку. Любая помощь будет оценена.

Фон Я перевожу большой проект C & C ++ со статической компиляции на динамическое связывание. Продукт чувствителен к производительности, поэтому я стараюсь минимизировать (значительное) влияние динамического связывания.

Я изменил видимость по умолчанию на скрытый (-fvisibility=hidden) в компиляции C / C ++. Я также использую -mcmodel=large. Это значительно улучшило производительность. Поскольку это огромный проект, повлиять на изменения интерфейса в рамках всего проекта не совсем возможно.

Моя проблема связана с юнит-тестами. Модульные тесты связаны с одним и тем же кодом, и я бы предпочел связать их динамически, поскольку это должно быть одним из главных преимуществ перехода. Однако юнит-тесты ссылаются на скрытые символы в библиотеке.

Функция Я переименовываю функции в библиотеке, используя objcopy. Я создаю заглушки сборки с видимостью по умолчанию, которые переходят непосредственно к скрытым символам У меня есть две библиотеки: одна для тестов и одна для производства, но обе они созданы из одних и тех же объектных файлов, в библиотеке тестов есть дополнительный файл заглушек.

Переменные Я не могу использовать заглушки, так как это адресация адресов в таблице GOT, если я правильно понимаю, поэтому код не выполняется. Проблема переменных - меньшее зло, поскольку существует мало ссылок на глобальные переменные, поэтому их можно сделать видимыми хирургическим путем.

Класс виртуальных таблиц Виртуальные таблицы класса являются слабыми объектами. Опять же, если я правильно понимаю, я не могу использовать метод заглушек, поскольку они не могут быть вызваны. Мне нужен какой-то способ связать их и сделать их видимыми, в противном случае мне нужно откатить почти все улучшения производительности или перекомпилировать весь код для тестов.

Есть предложения?

...