Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定我的linux平台是否支持强别名? > GCC手册描述了- Fabi-CopaTealValueN/Cuth>,它用于处理GCC 3.4到9.2的稍有变化的C++ ABI中的C++名称篡改的变化,并且可能稍后。它有一个重要的警告:_Linux_Gcc_Linker_Alias_Abi - Fatal编程技术网

如何确定我的linux平台是否支持强别名? > GCC手册描述了- Fabi-CopaTealValueN/Cuth>,它用于处理GCC 3.4到9.2的稍有变化的C++ ABI中的C++名称篡改的变化,并且可能稍后。它有一个重要的警告:

如何确定我的linux平台是否支持强别名? > GCC手册描述了- Fabi-CopaTealValueN/Cuth>,它用于处理GCC 3.4到9.2的稍有变化的C++ ABI中的C++名称篡改的变化,并且可能稍后。它有一个重要的警告:,linux,gcc,linker,alias,abi,Linux,Gcc,Linker,Alias,Abi,在支持强别名的目标上,G++通过 使用定义符号时使用正确的名称创建别名 错误的名称。此开关指定要用于的ABI版本 别名 但是,如何确定您的平台是否支持强别名,目前还不清楚 最简单的方法是编写一个小程序,使用\uuuu attribute\uuuu创建别名,然后使用nm查看别名是否存在。下面是示例代码,它是经典“Hello,World”程序的变体: /* strong_alias.c compile with 'gcc strong_alias.c' run ./a.out to c

在支持强别名的目标上,G++通过 使用定义符号时使用正确的名称创建别名 错误的名称。此开关指定要用于的ABI版本 别名


但是,如何确定您的平台是否支持强别名,目前还不清楚

最简单的方法是编写一个小程序,使用
\uuuu attribute\uuuu
创建别名,然后使用
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")));

我们可以看到,
main
strong\u alias
具有相同的地址,因此是别名

+1获得完整的答案。但这有点糟糕,因为前处理器应该能够完成这项工作,而不需要像Autotools这样的东西来解决。@jww Autotools?使用命令行和编辑器做这种事情不是更容易吗?我就是这样做的:唯一不平凡的部分是理解
\uuuu属性\uuuu
语法。您如何以源代码形式分发程序,并使其在不同的平台和编译器上正确运行?您肯定不是要求用户手动执行此类操作,然后在
CFLAGS
cxflags
中设置定义。啊,现在我同意您的看法。
nm ./a.out | egrep ' (main|strong_alias)'
000000000040052d T main
000000000040052d T strong_alias