【问题标题】:Building static linked Haxe cpp program构建静态链接的 Haxe cpp 程序
【发布时间】: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) 并且根本没有可执行文件。

标签: unix haxe


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多