導航:首頁 > 源碼編譯 > 源碼封庫時引用的庫怎麼處理

源碼封庫時引用的庫怎麼處理

發布時間:2024-11-22 18:53:21

『壹』 包含文件、引用文件和庫文件的區別

的本質區別,有一下幾點:
a, 位元組排序,一個int型的數據在windows里是由高地址存到低地址的4個位元組的(假設是32位機器),但是在某些UNIX伺服器,如AIX,它的排序方式就相反的,所以當程序被編譯成低級語言(例如匯編)的時候,內存及CPU的處理就會截然相反
b, 字長,有些unix伺服器是64位的,但大多WINDOWS是32位,那麼定義一個整形的時候就有用8個位元組和4個位元組的區別,字長不一樣,那麼執行起來用對內存的使用也自然就不一樣咯。
c,所謂的庫,也是由編譯器編譯出來的,在不同的OS下,由同一個代碼編譯出來的庫也會不一樣。
d,編譯器也各不相同,也會導致編譯出程序不完全相同。
e,所謂的調用,也就是將程序和庫一起打包,然後在找到庫裡面所定義的函數罷了

綜上,當一個程序或者庫要從其他OS搬到另一個不同規格的OS上的時候,一定要重新編譯一下草能確保程序跑起來不發生錯誤,求其原因也就是因為OS的本質區別,兼容的話,其實就是看OS是否在規格上有沒有本質區別

二,庫文件的編譯是單向的,所以無法取回源碼
.a庫的打包例: ar r libabc.a a.o b.o c.o
將a.o b.o c.o 合並打包成libabc.a。注意哦(.a一定要以lib開始.a結束哦)
WIN下我不是很在行,你說的lib大包應該沒錯。

三,我不是很清楚

希望對你有幫助,我2年工作的精華

『貳』 編譯器編譯原理:預處理,編譯,匯編,鏈接各步驟詳解

編譯器編譯原理:預處理,編譯,匯編,鏈接各步驟詳解

C和C++編譯器的編譯流程主要分為四個階段:預處理、編譯、匯編和鏈接。預處理階段主要處理源代碼中的宏定義和包含文件,將包含的文件內容插入到源代碼中。編譯階段則檢查代碼的語法正確性,並將其轉換為匯編語言。匯編階段將匯編語言轉換為二進制機器指令。鏈接階段則將生成的二進制文件與函數庫鏈接,以實現程序功能。

在預處理階段,編譯器會將源代碼中的文件包含進來,並且用戶可以使用Gcc選項」-E」查看預處理的結果。預處理階段主要處理# include和# define,它會將# include引用的.h文件插入到指定位置,並將源程序中使用到的宏替換為實際字元串。

編譯階段則檢查代碼的語法正確性,並將其轉換為匯編語言。用戶可以使用」-S」選項查看編譯結果。編譯階段生成的文件是文本文件,可以直接用文本處理工具閱讀。編譯階段可以接收.c和.i類型的文件。

匯編階段將匯編語言轉換為二進制機器指令,生成的目標文件可以直接執行。匯編階段可以接收.c, .i, .s的文件。

鏈接階段則將生成的目標文件與函數庫鏈接,實現程序功能。函數庫一般分為靜態庫和動態庫兩種,鏈接動態庫和靜態庫時使用的方法是一樣的,但是如果庫中存在同名的靜態庫文件和動態庫文件,鏈接時默認優先選擇動態庫。可以使用-static選項強制鏈接靜態庫文件。

完成鏈接後,編譯器生成可執行文件,可以直接執行。通過運行可執行文件,可以驗證程序功能是否實現。

『叄』 我現在想把自己寫的python模塊源代碼封裝成dll,然後在別的python腳本里調用,可以嗎

可以的,只要把python模塊轉換成dll模塊,利用Python自帶的ctypes模塊載入調用就行。

ctypes 是Python的外部函數庫。它提供了與 C語言兼容的數據類型,並允許調用 DLL 或共享庫中的函數。可使用該模塊以純 Python 形式對這些庫進行封裝。

ctypes導出了cdll對象,在 Windows 系統中還導出了windll和oledll對象用於載入動態鏈接庫。通過操作這些對象的屬性,你可以載入外部的動態鏈接庫。cdll載入按標準的cdecl調用協鋒滾議導出的函數,而windll導入的庫按stdcall調用協議調用其中的函數。

(3)源碼封庫時引用的庫怎麼處理擴展閱讀:

載入調用DLL的相關方法:

1、載入DLL銀扒余

載入的時候要根據你將要調用的函數是符合什麼調用約定的。

stdcall調用約定:兩種載入方式

Objdll = ctypes.windll.LoadLibrary("dllpath")

Objdll = ctypes.WinDLL("dllpath")

cdecl調用約定:也有兩種載入方式

Objdll = ctypes.cdll.LoadLibrary("dllpath")

Objdll = ctypes.CDLL("dllpath")

其實windll和cdll分別是WinDLL類和CDll類的對象。

2、調用dll中的方法

載入dll的時候會返回一個DLL對象(假設名字叫Objdll),利用該對象就可以調用dll中的方法。 e.g.如果dll中有個方法名字叫Add(注意如果經過stdcall聲明的方法,如果不是用def文件聲明的導出函數或者extern 「C」 聲明的話,編譯器會對函數名進行修此旦改,這個要注意。)

調用:nRet = Objdll.Add(12, 15) 即完成一次調用。

閱讀全文

與源碼封庫時引用的庫怎麼處理相關的資料

熱點內容
安卓boot配置文件都有什麼 瀏覽:529
數量關系排序演算法 瀏覽:180
serv文件怎麼傳到伺服器上 瀏覽:271
開發者聯名貢獻源碼 瀏覽:338
sae部署java 瀏覽:18
校園330app怎麼下載 瀏覽:23
javahashcode演算法 瀏覽:714
pdf轉doc手機軟體 瀏覽:531
方舟手游開伺服器機床怎麼選 瀏覽:255
qt編程入門pdf下載 瀏覽:784
java編程的三個步驟 瀏覽:776
s點b點主圖源碼 瀏覽:436
電腦可以刪除的臨時文件夾 瀏覽:9
小杜app上怎麼啟用 瀏覽:305
為什麼伺服器喇叭喊了一次就不行 瀏覽:480
phpdbo驅動 瀏覽:255
程序員尋找轉行建議 瀏覽:632
psgrepjava 瀏覽:415
夢幻誅仙12職業變態源碼 瀏覽:370
汽車的控制是怎麼編程的 瀏覽:686