2016-04-13 6 views
0

これは、Qtアプリケーションを異なるシステムで動作させる私の最初の試みです。静的にリンクされたQtアプリケーションの後方互換性の展開

私は静的なリンク方法を選択しました。私はすでにQt 5.5のソースをコンパイルし、静的なQtで私のアプリケーションをコンパイルしました。実行ファイルは自分のコンピュータで問題なく動作しています。 私のオペレーティングシステムはUbuntu 15.04です。しかし、私がUbuntu 14.04で同じ実行可能ファイルを実行しようとすると、問題に遭遇しました。エラーメッセージの主要な詳細を以下に示します。

のlibstdC++。so.6 cxxabi_1.3.8

を発見していない私は、標準のGoogle検索を行なったし、私は私のマシン上でそれの新しいバージョンを持っていたので、それは、私が作成したマシンに気づきました実行可能ファイルこの問題を処理する方法は非常に多くありました。私が見た解決策の1つは、libstdc++.soのあなた自身のコピーを実行可能ファイルと共に出荷することでした。しかし、.soファイルをペンドライブにコピーしようとすると、ファイルシステムがそのようなファイルをサポートしていないという警告が表示されました。

私の質問は、間違っていますか?また、実行可能なターゲットUbuntu 10.04を作成したい場合は、後方互換性の問題を処理する正しい手順は何でしょうか。 1つの方法は、私のマシンに同じOSをインストールしてから実行可能ファイルを作成することです。それ以外の方法はありますか?

答えて

0

libstd ++は下位互換性がありますが、下位互換性がありません。つまり、コンパイルしたものよりも新しいバージョンのlibstdC++でプログラムを実行できますが、逆もありません。これはあなたが経験したものです。

この問題を処理する1つの方法は、古いOSバージョンをビルドマシンとして使用することです。たとえば、Ubuntu 14.04 LTSを使用すると、this list of compatible target systemsが得られます。

使用しているビルドシステムによって、使用可能なコンパイラが制限される可能性があります。 Ubuntu 14.04では、ほとんどのC++ 11に適したGCC 4.8と、clang 3.6のパッケージが用意されており、C++ 14の完全なサポートが得られます。

石器時代のコンパイラを使用したくない場合は、Ubuntu 10.04をターゲットにすることが難しいでしょう。

libstdC++を出荷するというアイデアは、libcで同じ問題が発生するため、あまり役に立ちません。

+0

回答ありがとうございますが、Qtアプリケーションを作成している企業が旧Ubuntuバージョンをターゲットにするために使用する標準の古いOSがあります。それは私の大きな疑問でした –

+0

どのような互換性が必要ですか?どんなコンパイラが必要ですか?どのC++標準をアプリケーションで使用しますか?これは非常にカスタムの質問です。すべての典型的なLinuxディストリビューションがソースコードからパッケージをコンパイルすることを考えれば、この質問に対する一般的な答えはありません。 Linuxはプロプライエタリなソフトウェアに最適化されていません。 –

+0

私はUbuntu 10.04以降、C++標準のgnu ++ 98との互換性を希望しています。具体的ではないことを申し訳ありませんが、以前は一般的な方法があると思いました。 –

関連する問題