2012-03-26 11 views
3

clang + llvm(バージョン3.1)でプログラムをコンパイルしていて、同じclang + llvmバージョンのコンピュータでも実行しようとしています。私はUbuntu 10でコンパイルしていますが、実行しようとしている他のコンピュータにはCentOS 5があります。CentOSでは、LLVM(コンパイルパスはLLVMで実装されています)でコンパイルする際に問題が発生します。だから私はUbuntuでコンパイルし、そこからexeを取り出し、CentOSマシンで実行することを考えました。別のマシンでclang + llvmからコンパイルされたプログラムを実行する

しかし、私がしようとすると、次のエラーが発生します。

./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main) 
./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main) 

これをどのように解決できますか。私はそのマシンにrootアクセスを持っていないことに注意してください。

答えて

3

解決策の1つは、作業中のUbuntuマシンからCentOSマシンにライブラリをコピーすることです。あなたのホーム/ Workdir/whereever(TM)に入れ、あなたのLD_PRELOAD変数をそのライブラリに設定してください。しかし、これは紛失している唯一のライブラリではない可能性があります(また、ライブラリが他のライブラリに依存している場合もあります)。

これは、両方のマシンが同じアーキテクチャ(たとえば、ubuntuマシンが32ビットとCentOS 64の場合は動作しません)の場合にのみ機能します。

+0

LD_PRELOADがこのトリックを実行しました。驚くばかり! – pythonic

+0

もう一つの選択肢は、プログラムを静的にコンパイルすることです(つまり、すべての必要なライブラリ関数が含まれています)。 – flolo

1

クロスコンパイルは常に困難な問題です。あなたの場合は、2つのマシン上で異なるC++ライブラリバージョンがあります。これを頻繁に行う必要がない場合は、CentOSでコンパイルの問題を解決することをお勧めします。これはおそらく簡単な方法です。

+0

はい。 GCCはコンパイラスイートなので、C++コンパイラとCコンパイラが付属しています。あなたのC + +ライブラリは一致しないので、あなたのCライブラリもどちらも一致しません。 – Azrael3000

2

CentOS 5では、Ubuntu 11.04または11.10より古いバージョンのlibstdC++を使用しているため、そこからバイナリを使用することはできません。

CentOS 5でコンパイルするか、動作する古いコンパイル環境を見つけてください。 gccを使用していた場合は、LSBコンパイラ環境を調べることもできます。