2016-04-13 26 views
0

這是我第一次嘗試使Qt應用程序在不同的系統上工作。部署靜態鏈接的Qt應用程序向後兼容性

我選擇了靜態鏈接方法。我已經編譯了Qt 5.5的源代碼並使用靜態Qt編譯了我的應用程序。可執行文件在我的電腦上正常工作。 我的操作系統是Ubuntu 15.04。但是當我試圖在Ubuntu 14.04上運行相同的可執行文件時,我遇到了麻煩。下面給出錯誤消息的關鍵細節。

的libstdC++。so.6 cxxabi_1.3.8沒有找到

我做了一個標準的谷歌搜索,並意識到這是因爲我有它的一個新版本我的機器,我在那裏創造了機上可執行文件。有很多不同的方法來處理這個問題。我看到的一個解決方案包括將您自己的libstdc++.so副本與可執行文件一起發送。但是,當我試圖將.so文件複製到筆式驅動器時,出現警告,指出文件系統不支持這種文件。

我的問題是,我做錯了什麼?另外,如果我想讓可執行文件以Ubuntu 10.04爲目標,那麼處理向後兼容性問題的正確過程是什麼。我知道一種方法是在我的機器上安裝相同的操作系統,然後創建可執行文件,還有其他方法嗎?

回答

0

libstd ++是向後兼容的,但不是向前兼容的,這意味着你可以運行一個程序,它的libstdC++的版本比你編譯它的版本要新,但反之亦然。這是你所經歷的。

解決此問題的一種方法是使用較舊的操作系統版本作爲構建機器。例如,當你使用Ubuntu 14.04 LTS時,你會得到this list of compatible target systems

您正在使用的構建系統可能會限制可用的編譯器。在Ubuntu 14.04上,你會得到GCC 4.8,這對於大多數C++ 11來說都很好,並且可以使用3.6版的軟件包,這將爲你提供完整的C++ 14支持。

如果您不想使用石器時代編譯器,那麼定位Ubuntu 10.04將具有挑戰性。

運送libstdC++的想法不會對您有太大幫助,因爲您會遇到與libc相同的問題。

+0

感謝您的回答,但是是否有任何標準的舊操作系統,哪些公司正在使用qt應用程序來構建舊版Ubuntu,這是我的主要疑問 –

+0

您需要什麼兼容性?你需要什麼編譯器?你在你的應用程序中使用了哪種C++標準?這是一個非常自定義的問題。鑑於所有典型的Linux發行版都是從源代碼編譯它們的軟件包,所以這個問題沒有一般的答案。 Linux沒有針對專有軟件進行優化。 –

+0

我想從ubuntu 10.04開始的兼容性,C++標準gnu ++ 98,抱歉沒有具體,但我早些時候認爲會有一個通用的方法去實現它。 –