我尝试编译一个命令行版本的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
mj.MJ
可能是上一次编译的剩余物,因为-D static_link
会生成一个静态链接的 _库_(应该被称为libmj.MJ.a
),而没有可执行文件。 - Gama11