2016-02-18 44 views
0

我需要從可以在RedHat和SuSE發行版上運行的C++代碼構建一個二進制文件。我需要分發二進制文件,因爲我不能共享源文件。在這些約束條件下運行時,我認爲一種方法是將兼容版本的libstdC++與我的二進制文件一起發佈,並使用rpath或ldconfig將其鏈接到它。構建可在RHEL和SLES上運行的C++二進制文件

  1. compat-libstdC++在這種情況下有什麼用處嗎?它有什麼作用?
  2. 鑑於CentOS/RHEL 7和OpenSuSE/SLES 11,我如何確定哪一個是兼容的libstdC++版本,適用於這兩種操作系統?

我不能靜態鏈接了許多原因,包括在LGPL衍生作品的條款等

+0

編譯一個靜態二進制文件? –

+1

更新了我爲什麼無法靜態鏈接的問題。 – CppNoob

回答

0

當您分發不同的Linux發行版,你可以把所有依賴庫(包括的libstdC++)二進制文件成一個包含你的二進制文件的軟件包 - 你也可以在你的二進制文件中將RPATH設置爲$ ORIGIN,以便它可以在你的二進制文件中查找目錄中的庫。這樣它就可以與大多數Linux發行版一起工作。

+0

我構建了一個單一的二進制文件,而不是針對不同發行版的不同版本。這是一種不尋常的限制,但事實就是這樣。 – CppNoob

+1

@CppNoob - 好吧,如果你不能在1個文件旁邊發佈任何東西,那也沒用。但我正在談論單個包(二進制+庫),它適用於不同的發行版,而不是關於不同的包。 – ISanych

+0

問題是更多關於libstdC++版本和跨分佈的ABI兼容性。我明白rpath是如何工作的,但我應該包括哪些版本的libstdC++ - 這就是問題所在。識別版本的一般策略是什麼 - 考慮到目標發行版和版本,這就是問題所在。 – CppNoob

相關問題