[问题] 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