1

Eclipse 项目为 Linux 提供了安装程序。这些安装程序(或已安装的可执行文件)是否包含任何已编译的 C++ 代码?如果是这样,Eclipse 如何避免 C++ ABI 兼容性问题?

我认为 Eclipse 的本地库(如SWT)都必须用 C 编写。(我们现在先忽略 Windows。)查看 SWT 的源代码时,我注意到与XPCOM 相关的代码是用 C++ 编写的。

那么诀窍是什么?如果我从安装程序安装 Eclipse,我会得到这些东西吗?如果是这样,无论我的机器上使用哪个 C++ 运行时,它都能正常工作吗?如果是这样,“他们”是如何做到的?

(先发制人地解决花生画廊:我意识到我可以使用包管理器来安装 Eclipse。我问的是程序不是专门为我的机器量身定制的情况。)

我注意到SWT FAQ 解释说,“SWT 使用 JNI 与操作系统中的本机小部件进行交互。必须针对感兴趣的窗口系统、操作系统和硬件架构编译 SWT JNI 库。”

这让我想,“那么 Eclipse 如何能够为 Linux 制作一个万能的安装程序呢?” (也许如果我只是尝试使用这些安装程序之一,一切都会变得清晰。但有时最好问问你的更好的人。)

我试图了解使用 JNI 的 Java 项目如何处理 C++ ABI 兼容性问题。前几天问了一个类似的问题,还没有听到太多消息(Is the Java Native Interface (JNI) impacted by C++ ABI compatible issues?)。我认为 Eclipse 专家可能会给我一些指导,因为 Eclipse 可能必须处理类似的问题。

需要明确一点:Java 进程似乎基本上不能使用 C++ 库。Java 进程需要 C++ 运行时。如果一个共享库需要一个不兼容的 C++ 运行时......好吧,你现在可能明白了。

(感谢您阅读所有这些内容。)

4

1 回答 1

0

我的猜测是,当他们构建它时,他们将 c++ 标准库静态链接到应用程序中(或在安装程序期间提供他们自己的动态库副本)然后 glibc 是唯一的其他动态库,并且更容易处理(尽管仍然有与之相关的挑战)。

您可以测试它的一种方法是安装包(在 linux 上),然后针对可执行文件运行 ldd 实用程序并查看它链接的内容。

于 2012-01-06T17:49:19.700 回答