关于Haxe:Haxe-创建C ++独立可执行文件

Haxe - Create a C++ Stand-alone executable

我编写了一个haxe程序,尝试与远程服务器通信。我能够成功编译到C ++目标。可执行文件在我的系统上运行正常。但是,当我尝试在另一个Windows框上运行该命令时,它失败并显示以下错误

错误:无法加载模块std @ socket_init__0

然后,我安装了haxe和hxcpp,就像一个魅力一样。我能够运行该exe。我现在知道对hxcpp有依赖性。

那仍然不能解决我的问题,因为我想创建一个独立的应用程序。经过一番研究后,我发现了一个文件(ExampleMain.CPP),其中包含以下说明,我认为这可以解决我的问题。但是,我是新手,不太了解。有人可以带我走过去吗?谢谢

ExampleMain.CPP

这是一个示例主线,可用于链接静态版本。
首先,您需要使用以下命令构建标准库的静态版本:

cd $ HXCPP /运行时

haxelib运行hxcpp BuildLibs.xml -Dstatic_link

然后,您的应用程序的静态版本具有(注意:" static_link"之前的多余空间):

haxe -main YourMain -cpp cpp -D static_link

然后,您需要将以上库与此主程序(或修改后的版本)链接。
您可以选择创建一个VisualStudio项目,然后从中添加库
$ HXCPP / bin / Windows /(std,regexp,zlib).lib和您的应用程序库。

还要注意,如果使用-debug标志进行编译,则库将具有不同的名称。

从Windows的命令行链接(仅调试版本才需要user32.lib):

cl ExampleMain.cpp cpp / YourMain.lib $ HXCPP / bin / Windows / std.lib $ HXCPP / bin / Windows / zlib.lib $ HXCPP / bin / Windows / regexp.lib user32.lib

与其他操作系统不同,compile + link命令将有所不同。这是Mac的一个:

g ++ ExampleMain.cpp cpp / Test-debug.a $ HXCPP / bin / Mac / regexp.a $ HXCPP / bin / Mac / std.a $ HXCPP / bin / Mac / zlib.a

如果您想添加这3个静态库(例如nme),则将
也需要使用" -Dstatic_link"标志进行编译,并调用其" register_prims"
初始化调用。包含额外的静态库将需要该库
在链接行中,并且可能需要链接其他依赖项。
另请注意,静态链接可能会对许可产生影响
第三方库。


我不确定,但是看来您已经采取了hxcpp为您执行的相同步骤。当您编译独立应用程序时,它实际上是独立的,并且本身并不依赖于hxcpp-但是它依赖于您可能使用过的hxcpp中的标准库。例如,如前所述,如果使用正则表达式,则将需要hxcpp具有的regexp.dll。 haxe标准库位于std.dll中,而zlib如果您使用了来自zip包的压缩,则位于zlib中。

如果我没记错的话,默认是动态引用这些组件。为了使您的应用程序像您建议的那样独立,您只需要将这些dll复制到二进制文件中即可。

如果要从haxe代码自动静态链接到这些库组件,只需import cpp.link包中的类型即可。这指示hxcpp自动将其库作为编译的一部分,将其静态链接到二进制文件而不是动态链接。无需额外的步骤!

简短的答案:将import cpp.link.StaticStd;和链接包中的任何其他库组件添加到代码中。只要导入,它就可以在任何地方,它将被链接进来。