2010-06-09 82 views
1

我有一个程序,我正在与第三方分享。我将为他们提供一个bin可执行文件。它是用C++编写的,但也使用了一些c。他们建议它只需要c。你们认为这会是一个问题,因为我将在一个sparc工作站上进行编译和构建,这与他们的系统规格(如solaris 9和芯片组(32或64))有所不同,具体取决于他们使用的是什么?关于solaris 9平台问题的c vs C++问题

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

只是好奇,因为他们说它需要一个C编译。我怀疑,如果他们期待一个库,那么也许我需要解决这个问题,但如果它只是一个可执行文件,那么系统规格如os和芯片组就是重要的?

如果我在这个假设中错了,请让我知道在哪里。

回答

1

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

如果你只是给他们发送一个可执行文件,我不明白为什么语言会产生任何影响。如果你也分享代码,当然,这是一个完全不同的故事。

1

既然你只给他们提供一个可执行文件(没有共享库),你不应该有太多的麻烦。

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

而且,最好是在编译早期Solaris提供兼容性,即不要在Solaris 10上编译的Solaris 7,但在7 10.您获得IDEEA ...

+0

,如果我跑了在solaris 8上这是否意味着它将在solaris 9上运行? – 2010-06-09 21:25:26

+0

是的,只要目标机器具有应用程序所需的全部库。请参见http://www.sun.com/software/solaris/guarantee.jsp和 http://bit.ly/aGKKbF – Unknown 2010-06-10 06:40:21

+0

如果您正在讨论使用g ++还是Oracle/Sun C++编译器。 Oracle/Sun编译器的运行时库始终位于/ usr/lib中,并且它们针对新版本的编译器获取补丁更新。您不需要转发任何共享库,但最终用户可能需要在其Solaris 9系统上安装最新的C++库修补程序。 – 2010-06-10 19:13:24