Ich versuche, eine Befehlszeilenversion meines Haxe-Programms zu kompilieren, so dass es auf anderen Computern verwendet werden kann. Auf diesen Computern muss Haxe nicht unbedingt installiert sein. Daher muss ich ein statisch verknüpftes Programm erstellen. Ich habe versucht, die Erstellung einer solchen Version meines Programms mit:Gebäude statisch verbunden Haxe cpp Programm
haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link
jedoch das Ergebnis dynamisch verbunden ist:
$ file outCpp/MJ
MJ: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, ...
und in Folge die ausführbaren Dateien funktionieren nicht auf Computern, die diese Bibliotheken nicht installiert haben:
$ ./MJ
./MJ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./MJ)
Also offensichtlich "-D static_link" ist nicht genug. Ich fügte dann
package mj;
#if cpp
import cpp.link.StaticStd;
#end
(vergleiche Haxe - Create a C++ Stand-alone executable) zu mj/MJ.hx Datei. Nach der erneuten Ausführung:
haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link
Die Datei ist immer noch dynamisch verknüpft ... Was muss ich noch unter Linux tun?
PS:
$ haxe -version
3.4.2
Fyi, es ist buchstabiert "Haxe", nicht "HaXe". Es wurde vor ungefähr 5 Jahren geändert. :) – Gama11
ah tks für das Update – quant
In Bezug auf die eigentliche Frage - ich habe keine Antwort, aber 'mj.MJ' ist wahrscheinlich übrig von einer vorherigen Kompilation, als' -D static_link' produziert eine statisch verknüpfte _library_ (sollte sein etwas wie 'libmj.MJ.a' genannt und überhaupt keine ausführbare Datei. – Gama11