計算機程式 Computer Programming Language Lecture 9 編譯器進階使用 郭修伯 助理教授 (5488) • Compiler (編譯器) – 將程式轉碼為目的檔 (*.obj) 或執行檔 (*.exe)。 • Link (連結器) – 將compiler 所產生的目的檔 (*.obj) 連結成最後的可執行 檔 (*.exe),或是程式庫 (*.lib,*.dll)。 – 可以把不同語言程式碼產生的 obj 檔連結成一個執行檔。 • Library (程式庫) – 寫作程式時所用的庫存函式,存在 *.lib 的程式庫中。 – DF98\LIB\*.lib – IMSL • Debug (除錯工具) – 找程式碼的錯誤。 • Profile (分析工具) – 分析各函式的執行時間,以找出執行效率最差的部分。 Debug 模式與 Release 模式 Debug 模式下產生的檔案:C:\my document\fortran\debug Release 模式下產生的檔案:C:\my document\fortran\release Release 模式下編譯出的檔案經最佳化處理,執行較有效率,但是... 靜態程式庫 Fortran Static Library 編譯出來的是 *.lib 的程式庫,不是可執行的 *.exe檔 • 加程式碼於project • 重新開一project 加入*.f90 檔案 加入*.lib 檔案 或是:tool/options: 新增的 不要刪除 同樣地,module會編譯出相對應的 *.mod 檔。 *.mod 沒辦法直接加入 project 中,需放在tools/options/directories 下的 include files 中。 將程式庫拿給別人使用時,記得用 release 模式編輯! 動態程式庫 dll • 靜態程式庫: – 事先將程式所需使用的函式編譯成機械碼,儲存在 *.lib 檔中。 – 編譯器會去 *.lib 中找出需要的函式,複製一份,放 在執行檔中。 • 動態程式庫: – 事先將程式所需使用的函式編譯成機械碼,儲存在 *.dll 檔中。 – 編譯器不會將機械碼複製到執行檔中,而是在執行 檔中說明函式放在哪一個 *.dll 檔中。 – Unix/Linux 動態程式庫: *.a 和一般的程式的差異:需說明哪些函式可以被外界呼叫 說明函式sub可以被外界 呼叫。 沒有這指令的函式只能 被 DLL檔案中的函式呼 叫,不能被外界呼叫。 編譯: 產生: 開新project: 加入主程式和 *.lib 可以compile 和 build,但是... 看不見? • 將 *.dll 放到與 Usedll.exe 同一個目錄下 • 或是放在 windows作業系統目錄下,就能執行 一般的 Fortran 程式大多自行使用,不太需要編譯成 *.dll 檔。 與其他程式語言(如 Visual Basic, Delphi) 連結時,建議使用 DLL. • 執行檔的除錯 debug: – toolbars: tool/customize 加入(移除)中斷點 終止除錯 其他的除錯功能 一行一行除錯,深入函式 一行一行除錯,跳過函式 用debug 模式編輯: build/start debug/go 程式停在這 輸入想查看的變數名稱 手工除錯 • 不使用編譯器的除錯功能,直接在程式 碼中輸出一些額外的資訊 Fortran 呼叫 C 讓 Fortran 認識 C 的函式 兩個檔案同時加入 project 中,Fortran 檔案 會使用 VF編譯,C 檔案會使用VB編譯。 • 要讓 Fortran 看見 C 語言的函式 說明為 C 語言函式 函式用 C 語言寫的 哪一個 C 的函式 在Fortran中的名字 溝通編譯器 傳遞的是參數的位址 傳遞的是參數的值 從 Fortran 傳遞整數或浮點數變數到 C 語言很容易,只要兩邊型 態一致即可。但傳遞字串、複數、自訂型態需注意,此略。
© Copyright 2024 ExpyDoc