- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
更具体地说,假设两个编译器都在同一平台(操作系统 + 指令集)上。但是,其中一个目标文件是由依赖于编译器的代码生成的。另一方面 - 代码是面向对象的并且尊重封装。
我需要这个用于我正在制作的一种框架。目标平台是 GCC 和 Java 虚拟机所在的任何系统。实际上,该框架将在每个平台上编译。使用框架用户的编译器由他决定。
最佳答案
只要它们使用相同的目标文件格式并针对相同的机器指令集,您就应该能够链接它们。例如,假设您有两个 C 编译器,每个编译器都有自己的专有语言扩展。您编译两个不同的文件,一个使用编译器 A,另一个使用编译器 B。每个源文件都使用其各自编译器的语言扩展。只要两个编译器都设置为针对相同的平台和体系结构,例如 Linux 上的 i386 指令集,那么您应该能够将文件链接到一个可执行文件中。
See this list of object file formats on wiki .
这可能也是您感兴趣的:
UNIX tools for exploring object files
编辑
根据这篇文章“C++ Standard Library ABI”,有一个行业标准 C++ ABI,您应该能够链接符合该标准的任何编译器的目标文件。你可以在这里看到这个标准:
This document was developed jointly by an informal industry coalition consisting of (in alphabetical order) CodeSourcery, Compaq, EDG, HP, IBM, Intel, Red Hat, and SGI...
In this document, we specify the Application Binary Interface for C++ programs, that is, the object code interfaces between user C++ code and the implementation-provided system and libraries. This includes the memory layout for C++ data objects, including both predefined and user-defined data types, as well as internal compiler generated objects such as virtual tables. It also includes function calling interfaces, exception handling interfaces, global naming, and various object code conventions.
因此,只要您针对相同的指令集、目标文件格式并使用标准 C++ ABI(现在是 gcc/g++ 中的默认设置)就应该没问题,当然假设标准 C++ ABI 实际上是标准的并由在 Linux 上运行的大多数现代 C++ 编译器正确实现(这似乎是您的目标平台)。
编辑 2
你应该看看这篇 SO 帖子:
GCC vs MS C++ compiler for maintaining API backwards binary compatibility
Microsoft 似乎没有遵循任何关于其 C++ ABI 的一致标准(Itanium 或其他),因此如果您使用适用于 Windows 的 gcc 进行编译,则可能会出现问题。
你可能还想看看这两篇文章:
Policies/Binary Compatibility Issues With C++
Some thoughts on binary compatibility
您可以限制您的用户使用支持 Itanium ABI 的编译器,但这取决于您的目标受众。
关于c++ - 我可以将一个编译生成的目标文件链接到另一个编译生成的目标文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728116/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!