2017-11-29 6 views
3

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 
+2

Fyi, es ist buchstabiert "Haxe", nicht "HaXe". Es wurde vor ungefähr 5 Jahren geändert. :) – Gama11

+0

ah tks für das Update – quant

+1

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

Antwort

2

Die Haxe Standardbibliothek (HXCPP) auf dem Ziel-C++ verwendet, dynamisch verknüpften Bibliotheken für Standardfunktionen (wie "zlib" und der "std" Bibliothek), es sei denn Sie -D static_link bei älteren verwendet Versionen, aber beginnend mit Haxe 3.4 sind diese immer statisch verknüpft.

In aktuellen Versionen betrifft -D static_link weiterhin "NDLL" -Bibliotheken von Drittanbietern, z. B. die Lime-Bibliothek.

Ich persönlich benutze eine ältere Version von Linux (wie Ubuntu 12.04 oder 14.04) für die Distribution, aufgrund der Unterschiede in glibc auf älteren Linux-Systemen (oder Distributionen, die einen älteren glibc verwenden, wie CentOS).

Wenn Sie wollen, versuchen Sie mit experimentieren die HXCPP toolchain for Linux Ändern einer statischen libstdC++ Bibliothek if="static_link" zu ermöglichen und die Ergebnisse gemeinsam nutzen hier oder auf der Haxe Gemeinschaft forum.

Verwandte Themen