答案 0 :(得分:1)
uname -i
根据man uname
是不可移植的,可以编译出来。我的新Debian 8也将其打印为
$ uname -i
unknown
uname
是GNU 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
已将目标编译到其中。
注意:说uname
是coreutils
的一部分并非100%正确。 uname
是POSIX标准的一部分,但-i
的{{1}}(--hardware-platform
)选项不属于该规范。 uname
仅由-i
包实现(地狱,* BSD系统有coreutils
,但它的含义完全不同)。