ABI
问题
之前好像听到过对于不同的GCC,G++版本,使用的ABI可能会有不同。就很奇怪这个ABI到底是个什么。从man手册里面的确是看到有这个-fabi_version这个编译选项,也有不同的ABI版本:
定义
自己感觉应该是把源码编译完成,最后连接的时候,不同的编译器会根据不同的CPU架构(x86,ARM…),不同的操作系统(Windows,Linux,Fedoras,Darwin),来最后生成对应平台的机器码。从维基上面猜的:
一些文章和理解
StackOverFlow_1
从这篇文章里面可以看到,针对不同的CPU架构,操作系统,编译器都会有不同的ABI,才能生成在特定的环境下面可以运行的二进制文件。
StackOverFlow_2
这一段应该就是说在链接的时候,怎么去找到相关的定义,函数之类的玩意。
以及怎么去使用这些函数(即怎么调用这些函数,传参怎么传)
最初的问题
从man手册和维基里面大致可以看出来不同的ABI应该就是对同样class,struct的大小,对齐之类的操作处理方式不一样,这一类感觉应该是语言方面的。可能还会有上面说到的调用函数,传参之类的不同,这一类可能是硬件方面了。
最后
希望上面说的有偏差,也希望没有偏差,也希望能找到一个不同的ABI的例子,最近想买一块3950X,试试AMD的芯片跟Intel有什么差距,这个也算是一个写这篇文章的起点吧。