abi相关内容

x86-64 System V 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 ..
发布时间:2020-05-01 07:55:28 服务器开发

添加私有成员变量如何破坏C ++ ABI兼容性?

pimpl习惯用法通常用于允许在动态链接库中更改代码而不会破坏ABI兼容性,并且重新编译所有依赖库的代码. 大多数说明 我看到提到添加一个新的私有成员变量会更改公共和私有成员的偏移量.班级.这对我来说很有意义.我不明白的是,实际上这是如何打破依赖库的. 我已经阅读了很多有关ELF文件的内容,以及动态链接的实际工作方式,但是我仍然看不到如何更改共享库中的类大小会破坏事情. 例如这是 ..
发布时间:2020-05-01 03:27:01 C/C++开发

链接C ++ 17,C ++ 14和C ++ 11对象是否安全

假设我有三个编译对象,它们都是由相同的编译器/版本产生的: A使用C ++ 11标准进行编译 B使用C ++ 14标准进行编译 C使用C ++ 17标准进行编译 为简单起见,我们假设所有标头都是用C ++ 11编写的,仅使用语义在所有三个标准版本之间都没有改变的结构,因此任何相互依赖关系都可以通过标头包含来正确表达并且编译器没有反对. 这些对象是哪种组合,链接到单个二进制文件 ..
发布时间:2020-05-01 03:21:40 C/C++开发

避免Unix中的标准库冲突

我有一个共享库(so)对象,该对象公开了C API(extern "C").它不使用API​​中的C ++,也不抛出异常.在内部,它确实使用C ++,尤其是std::map和其他容器,以及一些琐碎的模板. 我的目标是能够将该库提供给Unix中的任何程序(我为每个目标linux发行版编译多个版本),而不会导致加载程序(例如,用即使它是用其他版本的标准库编译的也应该可以正常工作. 这是我通 ..
发布时间:2020-04-30 08:34:57 C/C++开发

std :: type_info :: hash_code()的唯一性和“应该"的含义

是否要保证相同的std::type_info::hash_code()值表示相同的类型? Cplusplus.com 似乎这样宣称: 对于任何两个相等的type_info对象,此函数返回相同的值,对于不同的类型,返回不同的值. [重点突出] Cppreference 似乎相反: 返回一个未指定的值,该值对于对象是相同的,引用相同的类型. 没有其他保证,特别是,值可以在同一程 ..
发布时间:2020-04-27 04:51:13 C/C++开发

如何编写跨版本/平台的Linux内核模块?

我是Linux内核模块编程的新手,有关该主题的许多入门指南都很少提供有关如何构建可在Linux的许多版本和CPU平台上运行的内核模块的信息.我看过的大多数指南都只是简单地指出诸如"Linux不能确保版本之间的任何 ABI/API兼容性".但是,其他操作系统的确为主要版本提供了这些保证,并且这些指南主要针对2.7(现在有点老了). 我想知道现在是否存在任何类型的ABI/API兼容性,或者是否存 ..
发布时间:2020-04-25 11:43:18 其他开发

arm-none-eabi和arm-linux-gnueabi之间的区别?

arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们(一个用于裸机软件,另一个用于打算在Linux上运行的软件)的区别.但是技术背景是什么? 据我所知,我看到了ABI的区别,它类似于API,但在二进制级别.它确保了不同应用程序的互操作性. 但是我真的不了解拥有或没有操作系统会以哪种方式影响我的工具链.我唯一想到的是,在编译裸机软件时,可能必须将库 ..
发布时间:2020-04-23 11:13:45 服务器开发

amd64 psABI在哪里?

AMD64 psABI以前托管在x86-64.org. 我有一个pdf文件副本,上面写着: 体系结构规范可从以下网站获取: http://www.x86-64.org/documentation . 但是 http://www.x86-64.org 已经关闭了很长时间.至少几个月. 有人知道最新的psABI可以从哪里获取吗? 解决方案 请参见 http://refs ..
发布时间:2020-04-23 11:09:22 服务器开发

从apk中排除abi

在我的应用程序中,我使用了具有x86,armeabi-v7a和mips(每个约2.7Mb)的本机代码的renderscript。另外我读了mips架构只有几个设备。因此,我想将我的应用程序捆绑到两个APK中:通用(例如x86和armeabi-v7a)和mips。我发现分割部分有助于为mips创建apk,但通用apk仍然包含mips体系结构。所以我的问题是如何从结果apk排除abi? 谢谢 ..
发布时间:2018-05-17 19:09:06 移动开发

如何安全地部署使用升级的编译器构建的应用程序

我有一个应用程序部署在一个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 ..
发布时间:2018-04-20 17:04:38 C/C++开发

如何避免二进制文件中的STT_GNU_IFUNC符号?

我需要部署到Red Hat 4.1.2框(其中包含gcc 4.1.2)。我在Ubuntu 11.10上使用GCC 4.6.1进行开发。不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用。原因似乎是ABI的变化,根据另一个Stackoverflow问题是由于引入了STT_GNU_IFUNC符号。有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的 ..
发布时间:2018-04-20 15:54:56 服务器开发

C运行时对象,dll边界

设计一个用于dll的C API的最好方法是处理传递“运行时依赖”(FILE *,由malloc返回的指针等)的问题。例如,如果两个DLL与不同版本的运行时链接,我的理解是您不能将FILE *从一个DLL传递到另一个dll。 是唯一的解决方案是使用依赖于Windows的API(可以保证在dll中工作)? C API已经存在并且已经成熟,但是主要是由unix POV设计的(当然还需要在unix上 ..
发布时间:2017-06-08 19:31:36 服务器开发

ELF文件格式的段和段有什么区别?

从维基可执行和可链接格式: 段包含文件的运行时执行所必需的信息,而段包含链接和重定位的重要数据。整个文件中的任何字节可以由最多一个部分拥有,并且可以存在不属于任何部分的孤立字节。 但是段和段之间有什么区别? 在可执行的ELF文件中,段是否包含一个或多个段? 解决方案 但是段和段之间有什么区别? 正是你引用的内容:段包含运行时需要的信息,而这些部分包含信息 分段 ..
发布时间:2017-04-16 20:07:51 服务器开发

什么是应用程序二进制接口(ABI)?

我从来没有明白什么是ABI。对于这么长的问题,我很抱歉。我只是想清楚地了解事情。请不要指向我的wiki文章,如果可以理解它,我不会在这里发布这么长的帖子。 这是我的心态关于不同的接口: 电视遥控器是用户和电视之间的接口。它是一个现有的实体,但是没有用(自身不提供任何功能)。 接口:它可以在电视机上实现。是该 功能的 功能和消费者之间的“现有实体”一个,接口本身 是不做任何事 ..
发布时间:2016-12-22 18:05:40 其他开发

为什么Clang强制结构参数为int

在函数中使用struct参数时,clang将更改函数签名。代替使用struct类型,签名将是等大小的强制int。在我的编译器项目中,我使用llvm结构类型的方法签名(这似乎更合乎逻辑)。 这不会是一个问题,当使用struct或coerced类型时,由LLVM生成的结果集合是不同的,而不是调用兼容。这导致我的编译器不能与带struct的C函数进行ABI兼容。 为什么clang会这样做?这 ..
发布时间:2016-11-22 22:23:34 C/C++