2012-03-26 5 views
3

Ich kompiliere ein Programm durch clang + llvm (Version 3.1) und versuche es auf einem Computer auszuführen, der auch die gleiche clang + llvm-Version hat. Ich kompiliere auf Ubuntu 10, aber der andere Computer, auf dem ich versuche zu laufen, hat CentOS 5. Dort (in CentOS) stoße ich auch auf Probleme beim Kompilieren durch LLVM (ein Compiler-Pass ist in LLVM implementiert). Deshalb habe ich darüber nachgedacht, auf Ubuntu zu kompilieren, die exe von dort zu nehmen und es einfach auf dem CentOS-Rechner laufen zu lassen.Ausführen eines Programms, das von clang + llvm auf einem anderen Computer kompiliert wurde

Wenn ich dies jedoch versuche, erhalte ich den folgenden Fehler.

./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) 

Wie kann ich das lösen? Bitte beachten Sie, dass ich auf diesem Rechner keine Root-Zugriffe habe.

Antwort

3

Eine Lösung wäre, die Bibliothek von Ihrem Ubuntu-Rechner auf Ihren CentOS-Rechner zu kopieren. Legen Sie Ihr Home/Workdir/woever (TM) ein und setzen Sie Ihre LD_PRELOAD-Variable auf diese Bibliothek. Aber das kann ziemlich mühsam sein, da es möglich ist, dass dies nicht die einzige Bibliothek ist, die fehlt (und vielleicht hängen Bibliotheken von anderen Bibliotheken ab, die Sie auch brauchen ...).

Dies funktioniert auch nur, wenn beide Maschinen die gleiche Architektur haben (z. B. funktioniert es nicht, wenn Ihr ubuntu-Rechner 32 Bit und Ihr CentOS 64 hat).

+0

LD_PRELOAD hat es geschafft. Genial! – pythonic

+0

Eine andere Option, die mir in den Sinn kommt, besteht darin, das Programm statisch zu kompilieren (d. H. Alle notwendigen Bibliotheksfunktionen sind enthalten). – flolo

1

Cross Compilation ist immer ein schwieriges Thema. In Ihrem Fall haben Sie verschiedene C++ - Bibliotheksversionen auf den beiden Rechnern. Falls Sie dies nicht oft tun müssen, schlage ich vor, dass Sie versuchen, Ihr Problem mit CentOS zu lösen. Es ist wahrscheinlich der einfachere Weg.

+0

Ja. GCC ist eine Compiler-Suite, daher kommt es mit einem C++ - und einem C-Compiler. Da Ihre C++ - Bibliotheken nicht übereinstimmen, werden auch Ihre C-Bibliotheken nicht übereinstimmen. – Azrael3000

2

Centos 5 verwendet eine ältere Version von libstdC++ als Ubuntu 11.04 oder 11.10, daher können keine Binaries von dort verwendet werden.

Kompilieren Sie entweder auf Centos 5, oder finden Sie eine ältere Kompilierumgebung, die funktioniert. Wenn Sie gcc verwenden, können Sie auch die LSB-Compilerumgebung untersuchen.