2010-06-09 78 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