+1 für jede Information, die hilft, das ganze Bild zu vervollständigen. Sie müssen die ganze Antwort nicht kennen. Ich werde einzelne Teile des Puzzles genauso schätzen. Vielen Dank.Wie kompilieren Sie für Linux x86 mit Linux amd64, cmake und g ++ kompilieren?
Ich bin dabei, meine erste Cross-Compilation zu versuchen. Ich habe sowohl SO als auch das Internet durchsucht und viele Informationen gefunden, aber ich weiß nicht immer, wie ich diese Teile zusammenfügen soll, weil es noch einige fehlende Teile gibt.
Mein Gastgeber: Linux Kubuntu AMD64.
Ziel: Linux Kubuntu x86 (32bit) (sollte einfach sein, nicht?)
Tools: g ++ und cmake.
Hier ist die Information, die ich gefunden:
How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake
Export erwähnt CFLAGS = -m32. Das ist ein Stück.
Cross-platform: selecting data types to use 32/64 bit
erwähnt Datentypen. Ich muss darauf in meinem Code achten.
#ifdef for 32-bit platform
#ifdef für 32-Bit-Plattform
Links auf die folgenden, obwohl ich noch nicht sicher bin, wie es zu benutzen:
http://predef.sourceforge.net/prearch.html
http://ww.ubuntuforums.org/showthread.php?t=1377396
Ich habe ein: sudo apt-get installieren g ++ - multilib
fehlende Teile:
Idealfall, wenn ich 'make' (mit c make), sollte es sowohl eine amd64-Binärdatei als auch eine x86-Nachricht ausgeben.
Teil meiner CMakeLists.txt sieht wie folgt aus:
add_definitions(-Wall -pthread)
add_executable (../run.amd64 user.cpp time.cpp init.cpp utils.cpp main.cpp)
target_link_libraries(../run.amd64 cppcms dbixx config++ ctemplate)
Wie kann ich die Flagge -m32 führen eine zweite ausführbare Datei zu erstellen?
Soll ich nur eine ausführbare Datei erstellen (z. B. zum Testen und Debuggen), wie sage ich cmake, ob es eine oder beide Binärdateien erstellen soll?
Auch können Sie sehen, dass ich einige Drittanbieter-Bibliotheken verwenden, von denen ich einige selbst kompilieren musste. Bedeutet das, dass ich auch jede dieser Binärdateien für den Ziel-Host kompilieren muss? Einige verwenden cmake und einige verwenden: ./configure; machen;
Wie würde ich diese Bibliotheken für den Ziel-Host kompilieren (zu verwendende Flags usw.)?
Hinweis: Die dynamisch verknüpften Bibliotheken sind bereits kompiliert und auf dem Zielcomputer installiert, also muss ich mich vielleicht nicht um diesen Schritt kümmern ... Ich bin mir nicht sicher: Das ist eines meiner fehlenden Teile ...
Was ich brauche ist eine Art Tutorial, oder zumindest einige der fehlenden Teile. Ich werde diesen Beitrag mit weiteren Details darüber, was ich erreicht habe, und wie.
Danke.
P.S.
Ist es überhaupt möglich?
Suche mehr, fand ich diese:
http://www.mail-archive.com/[email protected]/msg26265.html
„Der ursprüngliche Entwurf nicht für etwas mehr als windows-Linux oder Linux-Fenster überqueren compiles entworfen zu sein scheint.“
cmake ist NICHT getestet für Linux Amd64 zu Linux x86.
http://www.cmake.org/Wiki/CMake_Cross_Compiling#FAQ.2FPotential_Problems
"Bei gemischten 32/64-Bit-Linux-Installationen kann die Kreuzkompilierung nicht nur für 32/64 Bit verwendet werden."
??
+1 Danke für die ausführliche Zuschreibung. Ich werde das alles studieren und sehen, was ich tun kann. – augustin