2016-05-31 1 views
1
私は入力 gcc -v、それだけで同じ示し

...archlinuxのunameコマンドがこのように表示されるのはなぜですか?

私は、Debianでそれを試してみると、それは

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

+0

「gcc -v」は同じことを意味しますか?私は 'gcc -v'がどの作業ディストリビューションでも' '未知 ''という目標を示していることはまれではないことがわかります。 'gcc'はコンパイル時に定義されたターゲットを持っています。 – grochmal

答えて

1

uname -iman unameし、それに応じて非ポータブル..です正常に動作しますコンパイルすることができます。私の新しいDebianの8も

$ uname -i 
unknown 

unameGNU coreutilsの一部であるとして、それを印刷し、それは非常に単純なプログラムです。 code on savannahが表示されます。あなたがそこにコマンドラインオプションを使用して見れば--hardware-platform-i次のとおりです。今度は、デフォルトでは「不明」の印刷を行い、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; 

定義の印刷を強制

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 }; 

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_SYSINFOsys/systeminfo.hにする必要があり、そのファイルは、archのデフォルトでは存在しません。それは必ずしもパッケージがコンパイルされたときにそこになかったということを意味しません。しかし、ほとんどの場合、パッケージャはHAVE_SYSINFOパッケージを正しくコンパイルするのに気をつけなかったことを示しています。これは移植不可能なオプションであるため、受け入れ可能です。


gcc -vについての私のコメントを参照してください、私のアーチがTarget: x86_64-pc-linux-gnuにそれを正しく評価します。しかし、それはunameとは関係がありません。unameは、システムに関する情報を印刷するシステムコールを送信します。gccには、ターゲットがコンパイルされています。


注:unamecoreutilsの一部であることを言っては100%正しいではありません。 unameはPOSIX規格の一部ですが、-i--hardware-platform)のオプションはunameで、この仕様には含まれていません。 -iは、coreutilsパッケージ(hell、* BSDシステムは-iを持っていますが、そこにはまったく別の意味があります)によってのみ実装されています。

+0

ありがとう!...! – OsmanthusTree

関連する問題