2017年9月5日 星期二

[作業系統] 長檔名問題

問題:
在新安裝好windows 7 x64PC / NB上,
就算已經裝了之前OKcygwin toolchain但是還是發生build FW error
但是同樣的cygwin, toolchain(放置C:\Program Files)安裝在其他PC / NB卻是OK.

Error msg:
mips-xxxxx-elf-xxx not found or arm-xxxxxx-eabi-xxx not found.

原因:
Windows沒重新在Cygwin底下將長檔名(C:\Program Files)轉換為8.3格式(C:\Progra~1)

解決方式:
  1. 直接建一個C:\Progra~1並將toolchain放在這路徑底下。
  2. C:\Program Files 改為虛擬碟(cmd>subst)如 R:\,避開長檔名問題。
  3. mklink /J "C:\PROGRA~1\" "C:\Program Files\" //hard/soft link

背景知識:
windows較早的時期是用8.3格式來限制檔名長度,如"A2345678.txt"

後來進化到可用長檔名,但考慮到向下相容,每個長檔明會自動產生一個相應的8.3檔案名稱,其產生的規則如下:
  1. 如果長檔名是8.3大寫字母,在磁碟上不會儲存任何長檔名。
    • 例如:"TEXTFILE.TXT"

  1. 如果長檔名是8.3大小寫混合字母,那麼長檔名會儲存大小寫混合字母的檔名,在8.3的名稱會儲存它的大寫字母版本。
    • 例如:"TextFile.Txt"會轉換成"TEXTFILE.TXT"

  1. 長檔名只會保留基本名稱的首6位半形字元,以一個~號連接著,再以一個數字作結尾以作識別(數字應該是順序的,假設前六字源相同就會, 2 ,3,...的加上去),最後以副檔名的首3位字元作結束。從這個結果中再對無法使用的字元再作刪除,像(+)號會轉換成(_)號,另外這也會轉成全大寫字母。
  • 例如:"C:\Program Files" -> "C:\Progra~1"("Progra~1"已經存在,"Progra~2")


  1. Windows 2000開始,如果最少4個檔案或資料夾的短檔名的首6個字元是相同的話,該長檔名會另行將檔名轉作基本名稱的首2位字元(或如果基本名稱只有1個字元的話,便全取檔案名稱1個字元),再以4位元十六進位的檔案名稱的切細值連接上,接著~號,再接著一位的數字及.號,最後以首3位的副檔名作為結尾。結果,相比之中,這檔名是已經分拆及改用全大寫字母。
    • 例如:"TextFile.Mine.txt"會轉換成"TE021F~1.TXT"

沒有留言:

張貼留言