我正在學校項目上工作。不幸的是,我只是跑了一個像這樣的編譯:gcc -o file.c file.o我用編譯覆蓋了我的.c文件。我可以拿回來嗎?
我忘了把輸出的可執行文件的名稱,現在我以前的C文件不見了。有沒有辦法讓這個文件回來?我寫了很多代碼不見了。
程序寫在C的Unix服務器上。
謝謝!
我正在學校項目上工作。不幸的是,我只是跑了一個像這樣的編譯:gcc -o file.c file.o我用編譯覆蓋了我的.c文件。我可以拿回來嗎?
我忘了把輸出的可執行文件的名稱,現在我以前的C文件不見了。有沒有辦法讓這個文件回來?我寫了很多代碼不見了。
程序寫在C的Unix服務器上。
謝謝!
如果你的編輯器保存了臨時文件,他們可能仍然在那裏。在Unix下,文件本身已經消失。就像這個問題很快就會出現,因爲它超出了StackOverflow的範圍。
我認爲(正如Caleb剛剛觀察到的那樣),您瞭解了使用源代碼管理並定期檢查的許多好理由之一。
這裏是當你編譯錯誤代碼到錯誤的文件會發生什麼:
~ mgregory$ cat > foo.h
bad code
~ mgregory$ cat > foo.c
test text
~ mgregory$ gcc -o foo.c foo.h
foo.h:1:1: error: unknown type name 'bad'
bad code
^
foo.h:1:9: error: expected ';' after top level declarator
bad code
^
;
2 errors generated.
~ mgregory$ ls -l foo.c
ls: foo.c: No such file or directory
~ mgregory$
我想我真正的問題是這樣的:當你gcc -o file.c file.h時會發生什麼?它創建了一個空白名稱的可執行文件嗎?我很困惑,因爲file.c被完全廢棄 – user3842643
我剛剛試驗證實:如果編譯因錯誤而失敗(很可能如果您嘗試編譯沒有.c文件的頭文件),那麼目標文件將被刪除。這是有道理的:它會阻止你運行從舊版本的代碼生成的「舊」目標文件,忽略了當前版本的代碼無法編譯的事實 – GreenAsJade
有趣。很高興知道。經驗豐富的教訓,但這是一個積極的經驗,有兩個原因。我學會了總是使用版本控制。我確信我理解我的任務,因爲我能夠很快地重寫這個程序。 – user3842643
有沒有辦法讓這個文件回來?
如果您正在使用版本控制系統或進行備份,如果不是的話,你很可能不走運。
通常不可能找回一個文件(但細節是痛苦的操作系統和file system具體;如果您的Linux筆記本上的Ext4文件系統,你可以嘗試從e2fsprogsdebugfs
)。你顯然有備份,所以使用它們(如果你不這樣做,你會痛苦地學到一些重要的東西,而且我們大多數人在我們生命的早期就犯了同樣的錯誤,所以不要太過羞愧)。
您現在該瞭解什麼是version control系統。所以請閱讀git並學會使用它。
如果您的軟件具有free software許可證,您甚至可以使用http://github.com/(或其他類似http://gitlab.com/)作爲存儲庫。
您可能會遇到file file.c
和ls -l file.c
和stat file.c
獲得的裏面是什麼file.c
的想法。你可能會列出最近修改的文件與ls -alst
BTW,你應該編譯程序與
gcc -Wall -Wextra -g file.c -o prog
此要求與-Wall
所有警告,甚至更多的人與-Wextra
,與-g
調試信息。然後你可以使用gdb
調試器上的程序作爲gdb prog
順便說一句,你可能希望有一個GNU make和Makefile
只需鍵入make
編譯程序。 Here是一個簡單的例子Makefile
。
請注意,最近海灣合作委員會能夠處理pre-compiled headers(但它不是一個小型學校項目非常有用的功能)。如果您輸入gcc -o file.c file.h
,您的頭文件file.h
可能已預編譯爲file.c
出於好奇,你知道當你像這樣編譯時會發生什麼:gcc -o file.c file.h.我認爲它會用可執行文件覆蓋我的c文件,但c文件完全消失。在這一點上,我只是好奇。 – user3842643
你編譯過'file.h'還是'file.o'? –
該命令是:gcc -o file.c file.h(我忘了提供可執行文件的名字) – user3842643
請注意,這與C本身無關。 – immibis
http://stackoverflow.com/questions/2346754/getting-source-from-object-file –
你使用gedit?尋找tilda文件例如〜file.c – samgak