【问题标题】:c vs c++ on solaris 9 platform question在 solaris 9 平台问题上的 c vs c++
【发布时间】:2010-06-10 03:32:17
【问题描述】:

我有一个程序要与第三方共享。我将为他们提供一个 bin 可执行文件。它是用 c++ 编写的,但也使用了一些 c。他们建议它只需要是c。你们认为这会是一个问题吗,因为我将在一个 sparc 站上编译和构建它,这将在一定程度上符合他们的系统规格,如 solaris 9 和芯片组(32 或 64),具体取决于他们使用的内容?

solaris 9 是否能够编译我使用的 c++ 代码,或者他们是否需要在其末端添加 c++ 运行时库。我正在使用 c++ std 类。无论如何,如果我将这一切都建立在自己的身上,为什么还要担心他们拥有什么?它不是我要分享的静态/动态库,我认为它会发挥作用。

只是好奇,因为他们说它需要是一个 c 编译。我怀疑他们是否期待一个库,那么也许我需要解决这个问题,但如果它只是一个可执行文件,那么像操作系统和芯片组这样的系统规范才是最重要的?

如果我在这个假设中错了,请告诉我在哪里。

【问题讨论】:

    标签: c++ c solaris


    【解决方案1】:

    在最坏的情况下,您始终可以在 C++ 运行时库中静态链接。

    如果您只是向他们发送可执行文件,我不明白为什么该语言会产生任何影响。当然,如果您还共享代码,那就完全不同了。

    【讨论】:

      【解决方案2】:

      由于您只为他们提供一个可执行文件(没有共享库),因此您应该不会有太多麻烦。

      只需在您的二进制文件上运行 ldd 命令并查看它链接到哪些 C++ 库(例如,如果您使用 g++,您可能会看到 libstdc++);您应该将这些与您的可执行文件一起包括在内。不要依赖拥有它们的用户,它们可能会丢失或不兼容。您将需要使用 -rpath(链接器开关)来确保您的二进制文件将使用您提供的库,而不是系统中找到的任何库。

      另外,最好在较旧的 Solaris 上编译以提供兼容性,即不要在 Solaris 10 上编译 Solaris 7,而是在 7 上编译 10。你明白了...

      【讨论】:

      • 如果我在 solaris 8 上运行它是否意味着它将在 solaris 9 上运行?
      • 是的,前提是目标计算机具有您的应用程序所需的所有库。见sun.com/software/solaris/guarantee.jspbit.ly/aGKKbF
      • 了解您是在谈论使用 g++ 还是 Oracle/Sun C++ 编译器会很有用。 Oracle/Sun 编译器的运行时库始终位于 /usr/lib 中,它们会为新版本的编译器获取补丁更新。您不需要重新发送任何共享库,但最终用户可能需要在其 Solaris 9 系统上安装最新的 C++ 库补丁。
      • 我说的是 GNU 编译器;我对 Sun 的编译器和他们的 C++ ABI 的稳定性几乎没有经验。是的,询问用户是否安装了 C++ 库补丁是一种选择,只要该库与用于创建您的应用程序的库兼容(正如我所说,我不知道 Sun 保留了多少这种兼容性)。
      猜你喜欢
      • 2018-04-05
      • 2010-09-08
      • 1970-01-01
      • 2020-12-01
      • 2012-09-26
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多