Как узнать, поддерживает ли моя платформа Linux сильные псевдонимы? - PullRequest
1 голос
/ 26 сентября 2019

В руководстве GCC описывается - fabi-compat-version=n, который используется для обработки изменений в искажении имен C ++ в слегка измененных ABI C ++ GCC с 3.4 по 9.2 и, возможно, позже.У него есть важное предупреждение:

Для целей, которые поддерживают сильные псевдонимы, G ++ работает с искажениями путем создания псевдонима с правильным искаженным именем при определении символа с неправильным искаженным именем.Этот переключатель указывает, какую версию ABI использовать для псевдонима.

Однако не сразу очевидно, как определить, поддерживает ли ваша платформа сильные псевдонимы.

1 Ответ

2 голосов
/ 26 сентября 2019

Простой способ выяснить это - написать небольшую программу, которая использует __attribute__ для создания псевдонима, а затем использовать nm, чтобы проверить, существует ли псевдоним.Вот пример кода, который является вариантом классической программы «Hello, World»:

/* strong_alias.c 
   compile with 'gcc strong_alias.c'
   run ./a.out to check it works, and then run 'nm ./a.out'
   to check that strong_alias() has the same address as main() */

#include <stdio.h>

int main( int argc, char *argv[])
{
  printf( "Hello, World\n");
  return 0;
}

int strong_alias( int argc, char *argv[]) __attribute__ (( alias ("main")));

Скомпилируйте его и убедитесь, что он работает, затем используйте nm strong_alias для просмотра таблицы символов.Вот версия, скомпилированная в CentOS 7 для x86-64:

nm ./a.out | egrep ' (main|strong_alias)'
000000000040052d T main
000000000040052d T strong_alias

Мы видим, что main и strong_alias имеют одинаковый адрес и, таким образом, являются псевдонимами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...