2013-09-21 54 views
0

我正在通過Head First C做所有編程示例。第8章從靜態鏈接開始。我們使用這些四個命令(Cygwin的):計算機如何知道在這種情況下是使用靜態鏈接還是動態鏈接

gcc -I./includes -c hfcal.c -o hfcal.o 
gcc -I./includes -c elliptical.c -o elliptical.o 
ar -rcs ./libs/libhfcal.a hfcal.o 
gcc elliptical.o -L./libs -lhfcal -o elliptical 

假設我輸入的正確,它打印出幾行示出了燃燒橢圓機上的熱量。

接下來介紹動態鏈接。這不是書中最清楚的章節,我對它仍然有點模糊。這是因爲我不確定新代碼是否存在拼寫錯誤。該文本說,代碼和以前一樣,但在斜線之前留下了點,甚至在包含結尾的情況下,在一個情況下也將該點遺忘。我把這個點放回去,只是改變了他們說應該改變的部分。 (我去他們的勘誤表頁面,什麼也沒看到相關的。)下面是新的代碼:

gcc -I./includes -fPIC -c hfcal.c -o hfcal.o //Got a warning, fPIC ignored, as book predicted 
gcc -shared hfcal.o -o ./libs/libhfcal.dll 
gcc -I./includes -c elliptical.c -o elliptical.o 
gcc elliptical.o -L./libs -lhfcal -o elliptical 

注意,除了被忽略的-fPIC和第二線,這些都是作爲第一種情況相同的命令,在稍不同的順序。

當我成功運行./elliptical後,我想知道是否應該實際使用不同的目錄,並且可能缺少的點是故意的。我從來沒有rm'd檔案.a文件,它是在新的dll文件相同的目錄。編譯器如何知道是使用libhfcal.a還是libhfcal.dll,因爲它們都在那裏,我用同樣的方式調用它們?是因爲命令嗎?

任何好的資源,我可以閱讀更清晰的解釋,尤其是我可以嘗試的代碼?

+0

我有很多的下一個練習,我們都應該使用標準目錄失去必要的問題 - 一世。即使我按照Cygwin的指示,它仍然說沒有這樣的文件或目錄爲hfcal.h文件。然後我找到一個名爲include的文件夾,裏面裝滿了.h文件,所以我在那裏複製它並編譯。所以也許丟失的點不是一個錯誤,但沒有解釋得很好?我討厭浪費時間去搞清楚這本書應該說些什麼! – punstress

回答

0

我認爲缺少點和錯別字是錯誤的。否則,您需要在系統根目錄下包含包括包括目錄以及所需的頭文件。據我所知,它沒有什麼意義,因爲它沒有在書中的其他地方指出。

但我認爲,試圖動態鏈接時,你應該刪除./libs/libhfcal.a你的靜態連接的情況下創建的存檔,並從改變第三行:

gcc -shared hfcal.o -o ./libs/libhfcal.dll

到:

gcc -shared hfcal.o -o ./libs/libhfcal.dll.a

相關問題