【发布时间】:2017-11-29 11:53:29
【问题描述】:
我尝试编译我的 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
【问题讨论】:
-
仅供参考,拼写为“Haxe”,而不是“HaXe”。大约 5 年前改过。 :)
-
谢谢更新
-
关于实际问题 - 我没有答案,但
mj.MJ可能是之前编译的遗留问题,因为-D static_link会生成一个静态链接的 library (应该被称为libmj.MJ.a) 并且根本没有可执行文件。