2016-08-12 7 views
0

私は、デプロイメントマシンに展開するときしかし、私のようなエラーが見つけ、C++でのexecを構築して、[リンクlibc.so.6と/のlibstdC++の古いバージョンでso.6。]: `Devの生産のlibc /のlibstdC++のミスマッチ

/lib64/libc.so.6: version GLIBC_2.14 not found /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.14 not found /usr/lib64/libstdc++.so.6: version CXXABI_1.3.5 not found

私のマシンはこれまで、最近のカーネルやライブラリとUbuntuのである一方、配布先のマシンが古いlibcの(2.12)/のlibstdC++(3.4.13)を使用したRHELベースのシステムであるため、これが判明しました。残念ながらデプロイメントシステムをアップグレードすることはできません。

スタティックリンク(libcが失敗する)とライブラリバージョンをクラスタにコピーする(LD_PRELOADと-Wl、-rpathオプションを指定して実行する)ような処理方法を試しましたが、マシンに古いバージョンのgccもインストールしましたが、これもうまくいきません。

私はこれを動作させるために何らかの方法がありますか(おそらく私のローカルマシン上にオブジェクトコードを作成し、それを他のマシン上でリンクすることです)。または、ソースをそのマシンにコピーせずに、デプロイメントマシン上でコードをコンパイルする方法があります。 これは、デプロイメントマシンからシステムライブラリのコピーを取得してgccにリンクさせようとすることができますか? Compile with older libc (version `GLIBC_2.14' not found)Deploying Yesod to Heroku, can't build staticallyBuild and run C++ code on different version of Linux and glibc

に関連する(任意のものとの問題、そしてどのように正確にそれを行うには)

私はVMを経由して、これを行うための一つの方法を知っていますが、私は可能であればそれを避けたいです。 (HT Mat)

+0

回避策:プロダクションターゲットと同じOSバージョンで、開発ボックスにVMを作成します。 **コンパイルとテスト**のためにそれを使用してください。 – Mat

+0

はいVMを作成することは可能ですが、私は可能ならばそれを避けようとしました。 VMがubuntuにrhelを配備するのに適しているかもしれないという関連するノートについて。 – ssj3892414

+0

静的リンクには 'glibc-static'と他の静的ライブラリアーカイブが必要です。静的ライブラリアーカイブがない場合は、静的ライブラリをリンクすることはできません。 – alvits

答えて

0

-static-libstdc++オプションでアプリケーションをコンパイルします。

+0

私はそれを試しましたが、問題は正しく動作していないと言います。 – ssj3892414

+0

これは 'libstdC++'では役に立ちますが、GLIBCでは役に立ちません。 –

+0

すべてのlibstdC++問題を解決しますが、glibcだけを残します – ssj3892414