我尝试编译我的Haxe程序的命令行版本,以便可以在其他计算机上使用它。这些计算机不一定安装了Haxe - 所以我需要创建一个静态链接程序。我尝试用以下代码编译我的程序的这个版本:
haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link
但结果是动态链接的:
$ 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, ...
因此可执行文件不能在没有安装这些库的计算机上运行:
$ ./MJ
./MJ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./MJ)
所以很明显“-D static_link”是不够的。然后我添加了
package mj;
#if cpp
import cpp.link.StaticStd;
#end
(比较Haxe - Create a C++ Stand-alone executable)与mj / MJ.hx文件。重新执行后:
haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link
该文件仍然是动态链接的......我还需要在Linux上做什么?
P.S:
$ haxe -version
3.4.2
答案 0 :(得分:2)
C ++目标上的Haxe标准库(HXCPP)使用动态链接库来标准功能(例如“zlib”和“std”库),除非您在旧版本中使用-D static_link
,但从Haxe开始3.4,这些始终是静态链接的。
在当前版本中,-D static_link
仍会影响第三方“NDLL”库,例如Lime库。
我个人使用较旧版本的Linux(如Ubuntu 12.04或14.04)进行分发,因为较旧的Linux系统(或倾向于使用较旧的glibc的发行版,如CentOS)的glibc存在差异。
如果需要,请尝试尝试更改HXCPP toolchain for Linux以启用静态libstdc ++库if="static_link"
并在此处或在Haxe社区forum上分享结果。