關於gcc on windows的“拒絕訪問”問題
周銀輝
裝了個GCC on Windows,本想可以爽一把,但不料:
開啟gcc所在目錄,發現gcc.exe只有56個位元組,咦,太小了吧,什麼東東哦,用ultraEdit開啟:
注意到了嗎?這是一個“symlink” (符號連結,linux下連結的一種,還有一種是永久連結,這裡你可以把符號連結簡單地理解為windows下的“捷徑”),呵呵,windows怎麼可能認識符號連結這種進階貨。
並且我們注意到這個符號連結是指向etc/alternatives/下的,說明其肯定是為了相容多個版本的gcc而搞的這麼個符號連結。
在gcc.exe所在的目錄下,發現了兩個shell指令碼(set-gcc-default-3.sh和set-gcc-default-4.sh),更是證明了這個觀點啊,開啟set-gcc-default-4.sh瞧瞧:
#!/bin/bash
# We only switch the alternatives that exist for both compilers;
# gdc, gpc, g77 and gfortran never get switched.
for x in gcc g++ gcj gnat ; do
/usr/sbin/alternatives --set $x /usr/bin/$x-4.exe
done
なるほど ~~~
看到了嗎,gcc, g++, gcj, gnat 都被映射到了對應的XXX-4版本
所以,解決方案就很容易得到啦:
1, 刪掉 gcc.exe, g++.exe, gcj.exe, gnat.exe 這四個東東,要著也沒用,windows不認識
2, 在相同目錄下,選擇你所需要的gcc,g++, gcj, gnat版本,我這裡選擇xxx-4版(其實我電腦上根本就沒-3版),所以我選中gcc-4.exe, g++-4.exe, gcj-4.exe, gnat-4.exe, 複製他們得到各個副本,並將副本重新命名為gcc.exe, g++.exe, gcj.exe, gnat.exe
3, 如果你電腦上有多個版本,並且某個時候又想切換到其他版本上去,那麼goto step 1
注意:gcj和gnat不一定存在於你的電腦中,沒有的話,略過即可,其他的諸如abc.exe拒絕訪問的話,同理咯...
問題搞定: