我使用GCC在Ubuntu 13上編譯C++應用程序。我希望能夠在我的代碼中使用C++ 11功能,但同時仍然能夠生成一個二進制文件,我的用戶可以在舊版本的Ubuntu上運行。舊版發行版本上的二進制兼容性(使用C++ 11)
如果我編譯在Ubuntu 13 GCC我二進制文件的最新版本,將無法在Ubuntu上運行12 glibc的,因爲不向前兼容: (How compatible are different versions of glibc?)
我有哪些選擇?
這甚至可能沒有要求我的用戶跳過大規模的箍?
如果不是,我的用戶必須做些什麼才能運行二進制文件(即他們可以在較舊版本的Ubuntu上安裝更新的glibc)?
注:我不不想考慮靜態鏈接glibc的,因爲:
- 我讀過,這是一個非常糟糕的主意
- 許可問題
- 交叉分佈兼容性問題
目前我的應用程序沒有使用任何C++ 11功能,並且我在較早版本的Ubuntu wi上編譯一箇舊版本的GCC來避免這個問題。但它使我傷心不能夠使用最新和最偉大的語言特點:(
鏈接靜態。許可問題將以任何方式存在,而且是靜態編譯的程序 - 因爲它包含了所需的所有內容,而不是依賴最終用戶的庫 - 可以在基本上使用相同CPU的任何Linux系統上運行。 – cHao
只需在較舊的操作系統上使用較新的gcc編譯即可。從源代碼或手動添加的存儲庫安裝gcc。您可能需要靜態鏈接libstdC++,或者使用您的程序分發libstdC++的副本(我認爲這是合法的,如果您還發布libstdC++源代碼; IANAL,請諮詢您的法律部門)。 –
@cHao,我讀過很多關於靜態鏈接glibc的SO問題,許多人似乎表明這是一個壞主意。例如(http://stackoverflow.com/a/11654451/966782)。另外,關於靜態鏈接的LGPL讓我感到恐慌。我想避免它... – pqvst