当我输入gcc -v
时,它只是显示相同...
我已经在 Debian 中尝试过了,它的行为正常..
uname -i
是不可移植的,man uname
可以编译出来。我的新 Debian 8 也将其打印为
$ uname -i
unknown
uname
是GNU coreutils的一部分,它是一个非常简单的程序。你可以在 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
( --hardware-platform
) 选项uname
不是该规范的一部分。 -i
仅由coreutils
软件包实现(见鬼,*BSD 系统有-i
,但它在那里有完全不同的含义)。