Когда я вход gcc -v
, он просто показывает то же самое ...Почему команда uname команды archlinux выглядит так?
меня попробовать в Debian и он ведет себя нормально ..
Когда я вход gcc -v
, он просто показывает то же самое ...Почему команда uname команды archlinux выглядит так?
меня попробовать в Debian и он ведет себя нормально ..
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
(--hardware-platform
) для uname
не является частью этой спецификации. -i
реализован только пакетом coreutils
(черт, * BSD-системы имеют -i
, но он имеет совершенно иное значение).
Спасибо большое! ...! – OsmanthusTree
Что значит «gcc -v» показывает то же самое? Мне было бы очень маловероятно, что 'gcc -v' показывает свою цель как' unknown' в любом рабочем дистрибутиве. 'gcc' имеет свою цель, определенную во время компиляции. – grochmal