首页 文章
  • 7 votes
     answers
     views

    为什么在编译Linux内核和uBoot时arm-linux-gnueabi-gcc而不是arm-none-eabi-gcc?

    我有一些编译ARM cortex-m设备的裸机代码以及Linux核心,uBoot和Beaglebone Black(BBB)的应用程序的经验(更多特色ARM与MMU,生活在摇滚之下) . 从那以后,我认为cortex-m代码应该使用arm-none-eabi-gcc编译(因为没有操作系统),BBB的应用程序代码应该用arm-linux-gnueabi-gcc编译(因为那里)是一个操作系统,可以进行...
  • 8 votes
     answers
     views

    为什么应用程序二进制接口对编程很重要

    我不明白为什么ABI是开发用户空间应用程序的重要环境 . 是否将操作系统的系统调用集视为ABI?但是,如果是这样,那么关于标准库中封装的系统调用的所有复杂性是不是都很复杂? 那么 ABI compatibility 仅与在不同平台上运行静态链接的应用程序相关,因为系统调用将嵌入到二进制文件中?
  • 11 votes
     answers
     views

    返回元组时GCC / Clang x86_64 C ABI不匹配?

    在尝试to optimize return values on x86_64时,我注意到一件奇怪的事情 . 即,给出代码: #include <cstdint> #include <tuple> #include <utility> using namespace std; constexpr uint64_t a = 1u; constexpr uint6...
  • 1 votes
     answers
     views

    Eclipse是否必须处理C ABI兼容性问题?

    Eclipse项目提供installers for Linux . 这些安装程序(或已安装的可执行文件)是否包含任何已编译的C代码?如果是这样,Eclipse如何避免C ABI兼容性问题? 我认为Eclipse的本机库(如SWT)必须全部用C语言编写 . (现在让我们忽略Windows . )在查看SWT的源代码时,我注意到XPCOM-related code是用C语言编写的 . 那么诀窍是什么?...
  • 5 votes
     answers
     views

    混合使用C ABI构建旧版库

    在这种情况下,我有一个使用最近的GCC(4.3.3)的C代码库,但是我需要链接一个使用GCC 3.2.3构建的旧库 . 没有更新版本的库,我不能没有它,它是封闭源,所以它无法重建 . 这似乎是一个问题,因为GCC 4.3.3和3.2.3之间存在ABI不兼容性,所以我试图看看我的选择是什么来解决这个问题 . 一些额外的细节: 我可以使用-fabi-version = 1在我的代码库中重建所有内容...
  • 1 votes
     answers
     views

    ELF或二进制文件中是否有特定ABI的签名?

    我需要确定用于生成一些二进制文件,程序,动态和静态库的ABI . 我想询问是否有属性或标签或字符串我可以使用一些外部工具检查以查看哪个ABI用于创建该二进制对象 . 我的对象主要是用于x86和ARM的ELF,我将ABI用于调试目的,就像DWARF一样 . 编辑:类似于文件开头的魔术字节,通常用于检测文件的文件格式 .
  • 6 votes
     answers
     views

    std :: regex和双ABI

    今天我发现了一个有趣的双libstdc ABI案例,影响了库的兼容性 . 长话短说,我有两个库都在内部使用std :: regex . 一个是使用CXX11 ABI构建的,另一个不是 . 当这两个库在一个可执行文件中链接在一起时,它会在启动时崩溃(在输入 main 之前) . 这些库是不相关的,并且不公开提及任何 std:: 类型的接口 . 我认为这些库应该不受双重ABI问题的影响 . 显然不是!...
  • 21 votes
     answers
     views

    glibc:elf文件OS ABI无效

    下载并编译了glibc-2.13 . 当我尝试运行一个执行malloc()的示例C程序时 . 我收到以下错误 elf file OS ABI invalid 任何人都可以通过我的任何指针帮助解决这个问题 . 请注意我的内核版本是linux-2.6.35.9
  • 0 votes
     answers
     views

    rails ELF文件OS ABI在服务器linux服务器上无效

    我在使用rails应用程序时遇到问题,在尝试运行rake db:migrate on server(或者例如rails c)时,我得到了这个堆栈跟踪: 耙子流产! LoadError:/home/users/ruby/.gems/extensions/x86_64-linux/2.1.0-static/therubyracer-0.12.2/v8/init.so:ELF文件OS ABI无效 - ...
  • 2 votes
     answers
     views

    在ELF规范中,BA_OS和KE_OS是什么意思?

    在系统V ABI中摘录的ELF spec中,各种函数被引用为 exec(BA_OS) ,如1的第7页 . 其他函数以 KE_OS 引用 . 这些 *_OS 符号是什么意思?
  • 1 votes
     answers
     views

    ABI兼容的shared_ptr实现

    我正在研究一种COM风格的编译器交叉兼容插件框架,它依赖于兼容的虚拟表实现来实现ABI兼容性 . 我定义的接口只包含纯虚拟成员函数和重写的删除操作符,以便将破坏通道到实现位置 . 这适用于extern“C”工厂函数,它实例化接口的插件实现并返回接口类型指针 . 但是,我想知道智能指针是不是更现代的方式来管理插件对象的生命周期 . 我想我实际上设法创建了一个标准布局shared_ptr / weak...
  • 12 votes
     answers
     views

    sizeof(long long)!= 8的架构/ ABI

    在x86 / amd64中, sizeof(long long) 是8 . 让我引用颇具洞察力的8岁mail by Zack Weinberg: Scott Robert Ladd写道:在64位AMD64架构上,GCC将long长定义为64位,与长整数相同 . 假设某些64位指令(乘法)产生128位结果,那么long long定义为128位似乎不合逻辑吗?不,有两个原因:64位“long lon...
  • 2 votes
     answers
     views

    是否有工具来检查对C类的更改是否会破坏该类的先前版本?

    如果你已经在C中编程了一段时间,你可能会运行一个程序,该程序崩溃“没有明显的原因”,以找出该库的ABI不再兼容,你所要做的就是重新编译软件新版本的库 . ABI中断的原因是多个:虚拟表中的更改,添加/删除构造函数,析构函数或变量成员...... 我想知道的是:是否有一个工具可用于比较两个类定义(旧版本和当前版本)并告诉我它们是否与ABI兼容 . 这对确定我的项目版本很有用(即如果ABI发生了变化,...
  • 10 votes
     answers
     views

    x86_64 Linux函数和系统调用之间的ABI差异

    x86_64 SysV ABI的函数调用约定定义了在 rcx 寄存器中传递的整数参数#4 . 另一方面,Linux内核系统调用ABI使用 r10 用于同样的目的 . 所有其他参数都在函数和系统调用的相同寄存器中传递 . 这会导致一些奇怪的事情 . 例如,检查x32平台的glibc中 mmap 的实现(存在相同的差异): 00432ce0 <__mmap>: 432ce0: ...
  • 4 votes
     answers
     views

    什么是“C mangling的兼容性”?

    wint_t type在 wchar.h 中通过 stddef.h 设置,使用 __WINT_TYPE__ 默认情况下已在编译器中定义的事实 . 所以要改变 typedef unsigned int wint_t; 成 typedef wchar_t wint_t; 我们可以在 wchar.h 的开头使用以下代码 #undef __WINT_TYPE__ #define __WINT_TYP...
  • 0 votes
     answers
     views

    如何找到使用gcc-4.9 vs gcc-6.2构建的库的二进制兼容性?

    我有一个供应商为我们提供SoC,相关的BSP和一些关键的中间件 . 供应商使用gcc-4.9构建所有交付的软件 . 交付的软件有两个类别 源包:我们获取所有资源并自行构建 . 库和二进制文件:我们重用预先构建的供应商提供的服务 . 我们打算转向gcc-6.2,但供应商没有计划很快搬家 . 所以问题出现了: 对于预先构建的二进制文件/库,如果我们使用gcc-6.2并且供应商使用gcc...
  • 0 votes
     answers
     views

    架构和ABI兼容性

    我有一个想法,将C编译为二进制文件,将二进制文件存储在堆上并执行它 . 我正在考虑对Google Native Client这样的特定架构进行编译的一个实现,然后知道我编译的架构,在运行时使用相同或不同的编译器 - 在我的程序中编译"snippet"或"script"和将机器代码输出到堆上分配的内存 . 然后将函数指针指向正确的位置并运行它 . 我的问题是,...
  • 8 votes
     answers
     views

    默认构造函数和析构函数是否内联?

    我很好奇编译器生成的默认构造函数和析构函数是否内联,因为我可以证明它是正确的 . 一方面,您希望默认构造函数/析构函数不是内联的,以便稍后添加它们不会为每个分配的结构添加构造函数/析构函数调用,而在C中,假定类和结构之间唯一的功能差异成为默认的访问保护 . 也许链接器以某种方式解决这个问题也许答案因编译器而异? 这个问题的结果是:如果我在C中有一个POD结构,理论上我可以通过自己定义空内联构造函数...
  • 5 votes
     answers
     views

    没有找到void com.unity3d.player.UnityPlayer.nativeRestartActivityIndicator()的实现

    我是Unity的新手,我正在尝试将Unity游戏(它有ARcore)集成到原生Android应用程序中 . 我能够在一个新的HelloWorld应用程序中启动统一,但无法在我的真实应用程序(具有其他模块)中启动 . 注意:当我从Unity项目构建一个android库时,我包括armeabi-v7a和x86架构 . java.lang.UnsatisfiedLinkError中:未找到无效com.u...
  • 1 votes
     answers
     views

    libvirt如何与kvm通信?

    我试图更好地理解libvirt如何与KVM通信,以便能够从我正在开发的主机上的单个进程中启动KVM实例 . 它是否像qemu-kvm一样使用ioctl?它是否使用某种远程消息传递,如dbus或直接消息传递到本地套接字(我偏离本地套接字)?或者它是否直接绑定到KVM的内核ABI? 是否有可能(如可能在内核之上,而不是在内核中)(而不是最坏的想法)绕过libvirt并通过libvirt使用的方式直接与...
  • 29 votes
     answers
     views

    如果在64位代码中使用32位int 0x80 Linux ABI会发生什么?

    Linux上的 int 0x80 总是调用32位ABI,无论它调用什么模式: ebx 中的args, ecx ,...和来自 /usr/include/asm/unistd_32.h 的系统调用号 . (或者在没有 CONFIG_IA32_EMULATION 的情况下编译的64位内核崩溃) . 64-bit code should use syscall ,电话号码来自 /usr/include...
  • 29 votes
     answers
     views

    如果在64位代码中使用32位int 0x80 Linux ABI会发生什么?

    Linux上的 int 0x80 总是调用32位ABI,无论它调用的是什么模式: ebx 中的args, ecx ,...和来自 /usr/include/asm/unistd_32.h 的系统调用号 . (或者在没有 CONFIG_IA32_EMULATION 的情况下编译的64位内核崩溃) . 64-bit code should use syscall ,电话号码来自 /usr/inclu...
  • 151 votes
     answers
     views

    API和ABI之间的区别

    我是linux系统编程的新手,我在阅读 Linux System Programming 时遇到了API和ABI . Definition of API : API定义了一个软件在源级别与另一个软件进行通信的接口 . Definition of ABI : API定义源接口,而ABI定义特定体系结构上两个或多个软件之间的低级二进制接口 . 它定义了应用程序如何与自身交互,应用程序如何与内核交...
  • 348 votes
     answers
     views

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

    我从未明白ABI是什么 . 请不要指向维基百科的文章 . 如果我能理解它,我就不会在这里张贴这么长的帖子 . 这是我对不同界面的看法: 电视遥控器是用户和电视之间的接口 . 它是一个现有实体,但本身无用(不提供任何功能) . 遥控器上每个按钮的所有功能都在电视机中实现 . 界面:它是该功能的功能和消费者之间的“现有实体”层 . 接口本身不起作用 . 它只是调用后面的功能 . 现在取决于用户是谁,...
  • 141 votes
     answers
     views

    在C中按值传递结构是否有任何缺点,而不是传递指针?

    在C中按值传递结构是否有任何缺点,而不是传递指针? 如果结构很大,显然存在复制大量数据的性能方面,但对于较小的结构,它应该基本上与将多个值传递给函数相同 . 当用作返回值时,它可能更有趣 . C只有函数的单个返回值,但是你经常需要几个 . 所以一个简单的解决方案是将它们放在一个结构中并返回它 . 有没有理由支持或反对这个? 由于我在这里谈论的内容可能并不明显,我将举一个简单的例子 . 如果您使用...
  • -1 votes
     answers
     views

    何时/为什么libstdc和libc符号不兼容?

    Build : test.cpp #include <set> #include <string> void common_config_file_iterator(const std::set<std::string>& allowed_options) {} include.cpp #include <set> #include &l...
  • 18 votes
     answers
     views

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

    这就是维基百科所说的: 在计算机软件中,应用程序二进制接口(ABI)描述应用程序(或任何类型)程序与操作系统或其他应用程序之间的低级接口 . ABI涵盖了数据类型,大小和对齐等细节;调用约定,它控制函数参数的传递方式并返回检索的值;系统调用号码以及应用程序应如何向操作系统发出系统调用;并且在完整的操作系统ABI的情况下,目标文件,程序库等的二进制格式 . 完整的ABI(例如英特尔二进制兼容性标...
  • 3 votes
     answers
     views

    编译和ABI如何相关?

    编译和ABI如何相关? 编译器的唯一工作是为OS和/或其他应用程序构建应用程序二进制接口(ABI)吗? 关于ABI,引自Wikipedia: ABI涵盖数据类型,大小和对齐等细节;调用约定,它控制函数参数的传递方式并返回检索的值;系统调用号码以及应用程序应如何向操作系统发出系统调用;并且在完整的操作系统ABI的情况下,目标文件,程序库等的二进制格式 . 感谢致敬!
  • 11 votes
     answers
     views

    Java Native Interface(JNI)是否受C ABI兼容性问题的影响?

    Java Native Interface(JNI)是否受C ABI兼容性问题的影响? 我正在开发一个Java应用程序 . 我想使用Java Native Interface(JNI)来调用C库中的函数 . 我可以访问C库的代码,我可以重建它,但我可能需要 . (例如,我可以静态链接C运行时 . ) 我可以要求我的用户拥有JRE 6或更高版本,但我不能要求他们拥有任何特定的C运行时 . 一位同事...
  • 9 votes
     answers
     views

    每个cpu arch的真正ELF TLS ABI要求是什么?

    线程本地存储上的Ulrich Drepper's paper概述了几种不同cpu架构的TLS ABI,但我发现它不足以作为实现TLS的基础,原因有两个: 它省略了许多重要的拱门,如ARM,MIPS等(虽然包括一堆与Itanium完全无关的) 更重要的是,它将大量实现细节与ABI混合在一起,因此很难说出互操作性需要哪些属性,哪些只是其实现的一部分 . 例如,i386唯一的实际ABI要求是...

热门问题