2017-07-14 2 views
0

私のマシンでC++プログラムをコンパイルし、別のマシンでリモート実行する必要があります。私が持っている最新のGLIBCXXバージョンは3.4.21です。私が実行したいマシンは、GLIBCXX_3.4.2までしかありません。だから実行しようとすると、私はこのエラーを受け取ります。GLIBCXX_3.4.21をローカルにコンピュータクラスタにインストール

./test_x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./test_x) 

私はGCLIBCXX_3.4.21に更新するために、リモートマシン上の権限を持っていないので、私は、クラスタ内のroot権限を持っていないとして、それがローカルGLIBCXX_3.4.21をインストールすることができます場合、私は不思議でしたか?それはlibstdc++.soで使用されるバージョンのシンボルだとGCCの一部である - GLIBCXXがGLIBCとするを持っていないことを

+0

いいえ、libstdC++が唯一の依存関係である可能性は低いため、不可能です。新しいバージョンのgccとlibstdC++でコンパイルされたプログラムは、古いlibstdC++で動作する可能性はほとんどありません。 O/Sの残りの部分は、同じ問題がある古いライブラリを持つ可能性が高いことは言うまでもありません。たとえそれがリンクしていても、その理由でクラッシュする可能性があります。すべてを忘れてください。あなたはあなたの時間を無駄にしています。 –

+0

私のバージョンをダウングレードして、この方法でコンパイルできますか? –

+1

'libstdC++'だけでなく、他のすべての依存関係もダウングレードする必要があります。この時点で、古いオペレーティングシステムでVMをインストールしたほうがいいですし、ターゲット展開プラットフォームと同じプラットフォームにコードを構築してください。これが仮想マシンの目的です。 –

答えて

0

注意。

はい:ローカルバージョンのlibstdc++.so.6をクラスタにコピーして、プログラムで使用するのは簡単です。

実行ファイルを/cluster/radwa/fooにコピーするとします。次に、ローカルlibstdc++.so.6/cluster/radwaにコピーし、export LD_LIBRARY_PATH=/cluster/radwa、またはで実行可能なfooリンクをコピーします。

関連する問題