构建静态链接的Haxe cpp程序

4

我尝试编译一个命令行版本的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上我还需要做什么?
附言:
$ haxe -version
3.4.2

2
FYI,它的拼写是“Haxe”,不是“HaXe”。这个变化发生在大约5年前。 :) - Gama11
啊,谢谢更新。 - quant
1
关于实际问题 - 我没有答案,但是 mj.MJ 可能是上一次编译的剩余物,因为 -D static_link 会生成一个静态链接的 _库_(应该被称为 libmj.MJ.a),而没有可执行文件。 - Gama11
1个回答

2
HXCPP是Haxe标准库的C++目标,除非使用旧版-D static_link,否则使用动态链接库来处理标准功能(例如“zlib”和“std”库)。但是自Haxe 3.4开始,这些库始终被静态链接。
在当前版本中,-D static_link仍会影响第三方“NDLL”库,例如Lime库。
我个人使用较旧的Linux版本(如Ubuntu 12.04或14.04)进行分发构建,由于在旧Linux系统上有glibc的差异(或者使用较旧的glibc的发行版,例如CentOS)。
如果您愿意,请尝试更改Linux的HXCPP工具链以启用静态libstdc++库if="static_link",并在此处或Haxe社区论坛共享结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接