導航:首頁 > 源碼編譯 > Fortran編譯成c靜態庫

Fortran編譯成c靜態庫

發布時間:2023-12-27 19:59:03

『壹』 如何編譯C/Fortran動態/靜態鏈接庫

首先,傳統的編譯,也就是
靜態編譯
是把
源文件
翻譯成目標文件,這個是一次性過程,也就是你所謂的靜態編譯。
後來的Java和.NET等語言,首先編譯成中間形式,然後運行過程中根據需要編譯成本地代碼(注意這個過程不是一次性的,下次運行重新編譯),這個就是JIT(即時編譯)技術,從即時編譯發展出了動態編譯技術
————————————
(傳統的)編譯完成後,像C/C++、Fortran、匯編等語言,可以把多個目標文件合並到一個
庫文件
中,這個就是靜態庫。比如常說的
庫函數
printf就是libc裡面的函數。
如果有了啟動函數(main),main裡面使用了printf,就可以通過
靜態鏈接
技術,從libc中提取出printf所在的文件加入到可執行文件中,如果printf還需要其它函數,就繼續搜索並加入列表,直到形成一個
閉包
。這個就是靜態鏈接。
可是靜態鏈接有個明顯的缺點,如果每個程序都需要printf,那麼printf這個函數的代碼就會同時存在在每個程序中,這樣也太佔地方了吧。所以發明了動態連接技術,其實有兩種形式。無論哪一種,都是首先記錄下需要調用printf這個函數以及所在的
動態庫
,等到運行的時候再載入動態庫,從動態庫中找到真正的printf去執行。
由於,
動態鏈接
技術需要一些額外的信息,傳統的靜態庫是不具備的,這些額外信息主要是重復載入和卸載時所需要的一些代碼,因此需要
動態鏈接庫

『貳』 Linux下fortran編譯鏈接

so文件是動態庫的集合,由f90文件編譯而成,此時f90程序中一般不包含program開頭的主程序,而只包含mole,例如:

將f90源文件編譯為動態庫時,使用命令

此時將生成兩個文件,分別為bisectmod.mod和lib***.so,這兒的***是剛才自定義的名字,而*.mod文件名則是f90文件中mole的名字,是自動生成的,如果一個f90文件中包含N個mole,則會生成N個*.mod和1個lib***.so。so文件作為庫文件,也可以由多個f90文件共同編譯得到,相當於靜態庫中的打包,將多個庫打包到一個里,如下:

動態庫的使用包含兩部分,一是在編譯時,二是在程序運行時。
編譯包含動態庫的主程序時,要同時制定mod文件的路徑和so文件的路徑,如果mod文件、so文件以及主程序文件在同一目錄下,直接指定so文件即可:

但是當使用第三方庫時,通常會分別存放在include和lib文件夾中,此時就要單獨指定路徑了:

第一個參數-I是大寫的i,代表include,第二個l是小寫的L,代表lib的名字,可以省略lib以及後面的.so,第三個-L則是lib.so文件的路徑。

這樣編譯的結果不能運行,因為運行時程序找不到lib***.so文件,最好的辦法是指定LD_LIBRARY_PATH環境變數,當然也可以將lib***.so文件復制到系統的lib文件夾中。

閱讀全文

與Fortran編譯成c靜態庫相關的資料

熱點內容
加密技術在現實中應用體會 瀏覽:180
單片機如何換晶振 瀏覽:206
合並兩個數組java 瀏覽:13
命令標注圓半徑怎麼用 瀏覽:659
出差人員電腦加密 瀏覽:248
文件夾0項什麼意思 瀏覽:602
空調冷媒壓縮機啟動 瀏覽:911
流氓文件夾怎麼強制刪除 瀏覽:783
嵌入式基礎命令 瀏覽:526
當程序員必學的編程語言 瀏覽:907
pro文件夾有什麼用 瀏覽:357
我的世界伺服器有人開掛如何踢出 瀏覽:482
程序員有天賦 瀏覽:640
編程計算並輸出半徑 瀏覽:709
日期排序java 瀏覽:953
程序員的中介模式 瀏覽:881
python中求兩個字元串重復部分 瀏覽:495
如何查看收件發件伺服器 瀏覽:110
linux配置android環境變數 瀏覽:132
android文字測量 瀏覽:883