abi相关内容
用于 http:的x86-64 System V ABI(用于Windows以外的所有设备) //x86-64.org/documentation/abi.pdf ,但该站点现在已脱离互联网. 该文档是否有新的权威目录? 解决方案 System V x86-64 psABI在GitHub上维护. HJ Lu的github页面上有具有指向当前版本链接的Wiki x86-64和i386
..
以下链接说明了UNIX(BSD风格)和ampx的x86-32系统调用约定. Linux: http://www.int80h.org/bsdasm/#system-calls http://www .freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html 但是UNIX&上的x86-64系统调用约定是什么
..
Linux上的 int 0x80始终调用32位ABI,无论从什么模式调用它:ebx中的args,ecx,...和/usr/include/asm/unistd_32.h中的syscall号. (或者在没有CONFIG_IA32_EMULATION编译的64位内核上崩溃). 64位代码应使用syscall ,呼叫编号为/usr/include/asm/unistd_64.h,args为rdi
..
我正在尝试使用boost构建单元测试,但是链接器抱怨缺少功能.拿这个骨架代码 #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MAIN #include BOOST_AUTO_TEST_SUITE(TestFuncOps); BOOST_AUTO_TEST_CASE(CopyConstru
..
pimpl习惯用法通常用于允许在动态链接库中更改代码而不会破坏ABI兼容性,并且重新编译所有依赖库的代码. 大多数说明 我看到提到添加一个新的私有成员变量会更改公共和私有成员的偏移量.班级.这对我来说很有意义.我不明白的是,实际上这是如何打破依赖库的. 我已经阅读了很多有关ELF文件的内容,以及动态链接的实际工作方式,但是我仍然看不到如何更改共享库中的类大小会破坏事情. 例如这是
..
假设我有三个编译对象,它们都是由相同的编译器/版本产生的: A使用C ++ 11标准进行编译 B使用C ++ 14标准进行编译 C使用C ++ 17标准进行编译 为简单起见,我们假设所有标头都是用C ++ 11编写的,仅使用语义在所有三个标准版本之间都没有改变的结构,因此任何相互依赖关系都可以通过标头包含来正确表达并且编译器没有反对. 这些对象是哪种组合,链接到单个二进制文件
..
我有一个共享库(so)对象,该对象公开了C API(extern "C").它不使用API中的C ++,也不抛出异常.在内部,它确实使用C ++,尤其是std::map和其他容器,以及一些琐碎的模板. 我的目标是能够将该库提供给Unix中的任何程序(我为每个目标linux发行版编译多个版本),而不会导致加载程序(例如,用即使它是用其他版本的标准库编译的也应该可以正常工作. 这是我通
..
是否要保证相同的std::type_info::hash_code()值表示相同的类型? Cplusplus.com 似乎这样宣称: 对于任何两个相等的type_info对象,此函数返回相同的值,对于不同的类型,返回不同的值. [重点突出] Cppreference 似乎相反: 返回一个未指定的值,该值对于对象是相同的,引用相同的类型. 没有其他保证,特别是,值可以在同一程
..
我是Linux内核模块编程的新手,有关该主题的许多入门指南都很少提供有关如何构建可在Linux的许多版本和CPU平台上运行的内核模块的信息.我看过的大多数指南都只是简单地指出诸如"Linux不能确保版本之间的任何 ABI/API兼容性".但是,其他操作系统的确为主要版本提供了这些保证,并且这些指南主要针对2.7(现在有点老了). 我想知道现在是否存在任何类型的ABI/API兼容性,或者是否存
..
arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们(一个用于裸机软件,另一个用于打算在Linux上运行的软件)的区别.但是技术背景是什么? 据我所知,我看到了ABI的区别,它类似于API,但在二进制级别.它确保了不同应用程序的互操作性. 但是我真的不了解拥有或没有操作系统会以哪种方式影响我的工具链.我唯一想到的是,在编译裸机软件时,可能必须将库
..
AMD64 psABI以前托管在x86-64.org. 我有一个pdf文件副本,上面写着: 体系结构规范可从以下网站获取: http://www.x86-64.org/documentation . 但是 http://www.x86-64.org 已经关闭了很长时间.至少几个月. 有人知道最新的psABI可以从哪里获取吗? 解决方案 请参见 http://refs
..
当我研究android源代码时,我注意到app中的通用类加载器是 PathClassLoader 的实例,并且此类中有两个构造函数。一个是: public PathClassLoader(String dexPath,ClassLoader parent){ super(dexPath,null,null,亲本); } 另一个是: public PathCl
..
在我的应用程序中,我使用了具有x86,armeabi-v7a和mips(每个约2.7Mb)的本机代码的renderscript。另外我读了mips架构只有几个设备。因此,我想将我的应用程序捆绑到两个APK中:通用(例如x86和armeabi-v7a)和mips。我发现分割部分有助于为mips创建apk,但通用apk仍然包含mips体系结构。所以我的问题是如何从结果apk排除abi? 谢谢
..
我有一个应用程序部署在一个centos 6.7平台上,并使用本地C ++编译器构建,即gcc 4.4.7。现在由于某些原因(实际上,升级到Qt 5.7),我需要使用完全支持C ++ 11功能的现代编译器,比如说devtoolset-2中的gcc 4.8.2。另一种可能是从源头上构建一个新版本的gcc。根据 https://gcc.gnu.org/onlinedocs/libstdc++/manua
..
我需要部署到Red Hat 4.1.2框(其中包含gcc 4.1.2)。我在Ubuntu 11.10上使用GCC 4.6.1进行开发。不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用。原因似乎是ABI的变化,根据另一个Stackoverflow问题是由于引入了STT_GNU_IFUNC符号。有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的
..
我有这样的代码如下 try { doSomething(); } catch(InterruptException){ goto rewind_code; } if(0){ rewind_code: longjmp(savepoint,1); } 我的问题是,是由C ++运行时免费存储的异常对象当我 goto 出来的catch块?或者是允许缓存它的运
..
设计一个用于dll的C API的最好方法是处理传递“运行时依赖”(FILE *,由malloc返回的指针等)的问题。例如,如果两个DLL与不同版本的运行时链接,我的理解是您不能将FILE *从一个DLL传递到另一个dll。 是唯一的解决方案是使用依赖于Windows的API(可以保证在dll中工作)? C API已经存在并且已经成熟,但是主要是由unix POV设计的(当然还需要在unix上
..
从维基可执行和可链接格式: 段包含文件的运行时执行所必需的信息,而段包含链接和重定位的重要数据。整个文件中的任何字节可以由最多一个部分拥有,并且可以存在不属于任何部分的孤立字节。 但是段和段之间有什么区别? 在可执行的ELF文件中,段是否包含一个或多个段? 解决方案 但是段和段之间有什么区别? 正是你引用的内容:段包含运行时需要的信息,而这些部分包含信息 分段
..
我从来没有明白什么是ABI。对于这么长的问题,我很抱歉。我只是想清楚地了解事情。请不要指向我的wiki文章,如果可以理解它,我不会在这里发布这么长的帖子。 这是我的心态关于不同的接口: 电视遥控器是用户和电视之间的接口。它是一个现有的实体,但是没有用(自身不提供任何功能)。 接口:它可以在电视机上实现。是该 功能的 功能和消费者之间的“现有实体”一个,接口本身 是不做任何事
..
在函数中使用struct参数时,clang将更改函数签名。代替使用struct类型,签名将是等大小的强制int。在我的编译器项目中,我使用llvm结构类型的方法签名(这似乎更合乎逻辑)。 这不会是一个问题,当使用struct或coerced类型时,由LLVM生成的结果集合是不同的,而不是调用兼容。这导致我的编译器不能与带struct的C函数进行ABI兼容。 为什么clang会这样做?这
..