unix - 构建静态链接的 Haxe cpp 程序

标签 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 上我还需要做什么?

PS:
$ haxe -version
3.4.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 .

关于unix - 构建静态链接的 Haxe cpp 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552229/

相关文章:

c++ - 如何从本地目录加载 C++ 中的图像

c - 有一种可移植的方法可以从类似套接字的文件描述符中丢弃许多可读字节吗?

shell - 在使用 shell 脚本拆分文件名和文件夹路径方面需要帮助

php - Ubuntu 到 Windows + php/mysql xml 脚本没有响应

haxe - 检查类的属性和类型

linux - 在 Bash 中,如何在每行后面添加文字\n?

actionscript-3 - 是否可以使用使用类型参数的 Haxe 编写 AS3 库?

javascript - 监听点击事件JS

python - 从 Haxe 内部调用外部 Python 类函数

namespaces - 如何避免 haxe Type 类和 C# Type 类之间的冲突?