构建静态链接的Haxe cpp程序

时间:2017-11-29 11:53:30

标签: unix haxe

我尝试编译我的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

1 个答案:

答案 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上分享结果。