[問題] ABI 相容 相關問題

作者: lovejomi (JOMI)   2019-06-08 19:43:56
https://www.acodersjourney.com/20-abi-breaking-changes/
看到這篇文章
針對可相容的改動
7. Change the implementation of an inline method
8. Change an inline method to non-inline
這兩點我無法理解
我對abi相容的認知 大概是
exe 不需re compile, 更新.dll or .so 即可正常運行
但是
7
假設我exe 已經build好,如果inline 確實發生了
表示 inline的那份程式碼已經是 exe 的code section的一部分了
我inline改了實作 怎麼可能不需要recompile exe,無法理解......
至於 8 ,如果 dll 的inline拿掉 可是不改實作,可能真的不會不相容(因為沒改實作
邏輯)但這表示dll的code section已經多了 這段新增的程式碼 , 這樣不會有任何side
effect產生嗎?(這部分沒概念)
承abi相容問題,
1.雖然可以遵守一些規範,但難免有時候不小心改出不相容的時候,難道只能用測試來確
保相容性嗎,還是有什麼tool可以提早發現?
2. 相容性這件事真的很重要嗎?我全部exe跟相關用到這.so的module都重新compile , g
it diff發現有改變發生 我就全部當成更新的一部分,這有什麼大問題嗎? 容量嗎 ,畢
竟這些比起asset都來得小很多 為什麼要追求相容呢? 當然OS提供的lib 該要追求這.
如果都自己的產品的一部分 這很重要嗎?
3. inline成功後 函數 應該不存在在symbol table吧?這樣上面說可以相容的結論 更是
讓我無法理解了
4. 看過有code寫 inline在.h declare, inline 也寫在.cpp definition. 這種寫法是不
是不太正確(還是也可以,還是有特殊用意)
可以簡單記住 函數要inline 就把定義寫在.h
class內 函數寫define在.h 預設inline 所以可以不特別寫(大方向有錯誤嗎?)
以上
謝謝:)
作者: Bencrie   2019-06-08 23:39:00
sanitizer、valgrind 之類的檢查記憶體存取?ABI 不相容會壞的大概就堆疊吧
作者: RishYang (Rish)   2019-06-09 19:06:00
在exe中的應該不會有事,78在意的是外部的inline吧!inline寫兩遍的問題,根據78就可寫一遍吧
作者: lovejomi (JOMI)   2019-06-09 22:11:00
到底怎麼寫inline才是對的...https://www.geeksforgeeks.org/inline-functions-cpp/The best programming style is to just write the prototype of function inside the class and specify it asan inline in the function definition.範例這反而沒看過這樣寫...而且這樣寫,.so要怎麼讓外部連結的人在compile time做inline
作者: Bencrie   2019-06-09 22:53:00
不然輸出 .S 出來看倒底編出什麼東西?
作者: lovejomi (JOMI)   2019-06-09 23:11:00
https://ideone.com/f9fBzw發現怎麼寫都給過 inline隨便加都可以...細看網站似乎是希望定義分開但一樣寫在header...這樣比較好嗎?
作者: RishYang (Rish)   2019-06-10 00:08:00
https://reurl.cc/pRXAe 原因其實很簡單,因為inline特性是展開,要在編譯時期知道原始碼inline確實可以隨便加,但宣告與定義的檔案分開時卻可能會在別的檔案要連結時出現找不到的問題回到相容問題,如果把所有inline都變成non-inline,連結時的問題就可以解決
作者: lovejomi (JOMI)   2019-06-10 08:38:00
最後一句,需要重新連結這樣還叫相容嗎

Links booklink

Contact Us: admin [ a t ] ucptt.com