就你不知道 二進位制相容性

2021-06-26 22:45:47 字數 551 閱讀 1027

簡單的理解,就是乙個exe檔案需要用到其他dll檔案,如果我們不重新編譯鏈結exe,替換乙個新的dll,而執行正常,則稱為二進位制相容良好。

這種應用場景很多,例如,發布新的補丁程式,只給客戶公升級極少的dll檔案,而多數的exe,dll都不用更新了。

不幸的是,不隨願的情況也很多。

場景一:

dll的原始碼 int __cdecl add(int,int);

dll的二進位制程式入口 ?add@@yahhh@z

exe的原始碼 int x = add(1,2);  

exe要尋找的入口 

?add@@yahhh@z  

此時:dll和exe配合良好

dll的新修改的原始碼 int __cdecl add(int,int,int c=0);

dll的入口(假設它重新編譯鏈結)

?add@@yahhhh@z

exe的原始碼int x = add(1,2);  

exe要尋找的入口(假設它未重新編譯鏈結)?add@@yahhh@z

此時:dll提供的入口和exe想進入的入口不一致了。

最新的F 破壞了二進位制相容性

微軟在 vs 2010 beta 1中包含了f 並發布了對應的用於vs2008的ctp更新。最新的二進位制版本1.9.6.16,和之前的版本1.9.6.2不相容,意味著所有之前的 都需要重新編譯。微軟不僅把f 新增到vs 2010 beta 1中以實現2007年許下在visual studio中包含...

二進位制相容問題

二進位制相容問題,主要是針對動態鏈結庫而言的。在windows上就是dll,在linux上就是so。如果主程式exe 當然也可以是客戶庫 不變,公升級了依賴庫so1到so2,而不需要重新編譯,那麼就是說so2是相容so1庫的。二進位制相容涉及到編譯問題,所以和硬體平台,軟體平台以及編譯器等都是密切相...

c 二進位制相容本質

總的一條就是讓client只依賴 名字 而不依賴任何 實現 實現 具體的就是2類 1 函式體,code 2 任何記憶體塊大小,layout細節 為什麼會有二進位制相容問題,就是因為一般的c 標頭檔案並不是單純的介面宣告,其中也還包括了 實現細節 因為成員變數就是一種記憶體layout,就屬於實現細節...