为什么archlinux的uname命令显示如下?

时间:2016-05-31 10:56:01

标签: archlinux archlinux-arm linux-distro

当我输入gcc -v时,它只显示相同的...

我在Debian中尝试过,它表现正常......

I only meet this problem in arch and how can i fix it??

1 个答案:

答案 0 :(得分:1)

uname -i根据man uname是不可移植的,可以编译出来。我的新Debian 8也将其打印为

$ uname -i
unknown

unameGNU coreutils的一部分,这是一个非常简单的程序。你可以看到code on savannah。如果查看命令行选项,--hardware-platform-i

  88 static struct option const uname_long_options[] =
  89 {
  90   {"all", no_argument, NULL, 'a'},
  ...
  97   {"machine", no_argument, NULL, 'm'},
  98   {"processor", no_argument, NULL, 'p'},
  99   {"hardware-platform", no_argument, NULL, 'i'},
 100   {"operating-system", no_argument, NULL, 'o'},
 101   {GETOPT_HELP_OPTION_DECL},
 102   {GETOPT_VERSION_OPTION_DECL},
 103   {NULL, 0, NULL, 0}
 104 };

强制打印定义PRINT_HARDWARE_PLATFORM

 198       while ((c = getopt_long (argc, argv, "asnrvmpio",
 199                                uname_long_options, NULL)) != -1)
 200         {
 201           switch (c)
 202             {
 ...
 227             case 'p':
 228               toprint |= PRINT_PROCESSOR;
 229               break;
 230 
 231             case 'i':
 232               toprint |= PRINT_HARDWARE_PLATFORM;
 233               break;

默认情况下,打印“未知”。

 344   if (toprint & PRINT_HARDWARE_PLATFORM)
 345     {
 346       char const *element = unknown;
 347 #if HAVE_SYSINFO && defined SI_PLATFORM
 348       {
 349         static char hardware_platform[257];
 350         if (0 <= sysinfo (SI_PLATFORM,
 351                           hardware_platform, sizeof hardware_platform))
 352           element = hardware_platform;
 353       }
 354 #endif

如果我没有记错(我可能会)HAVE_SYSINFO应该在sys/systeminfo.h,并且该文件默认不存在于arch中。这并不一定意味着编译包时不存在。然而,它表明,最有可能的是,打包者没有用HAVE_SYSINFO正确设置来编译包。这是可以接受的,因为它是一种非便携式选项。

查看我对gcc -v的评论,我的广告正确评估了Target: x86_64-pc-linux-gnu。但这与uname无关,uname发送系统调用以打印有关系统的信息,gcc已将目标编译到其中。

注意:说unamecoreutils的一部分并非100%正确。 uname是POSIX标准的一部分,但-i的{​​{1}}(--hardware-platform)选项不属于该规范。 uname仅由-i包实现(地狱,* BSD系统有coreutils,但它的含义完全不同)。