繁体   English   中英

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 / runtime

haxelib运行hxcpp BuildLibs.xml -Dstatic_link

然后是你的应用程序的静态版本(注意:'static_link'之前的额外空格):

haxe -main YourMain -cpp cpp -D static_link

然后,您需要将上述库与此(或修改版本)main链接。 您可以选择创建一个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”init调用。 包含额外的静态库将需要链接行中的库,并且可能需要链接其他依赖项。 另请注意,静态链接第三方库可能存在许可问题。

我不确定,但似乎你正在采取hxcpp为你做的相同的额外步骤。 编译独立应用程序时,它实际上是独立的,并且不依赖于hxcpp本身 - 但它依赖于您可能使用过的hxcpp中的标准库。 例如,如果您使用正则表达式,则需要hxcpp为其提供的regexp.dll,如您所述。 haxe标准库位于std.dll中,zlib是使用zip包中的压缩。

如果我没有弄错,默认是动态引用这些组件。 为了使您的应用程序按照您的建议独立,您只需将这些dll与二进制文件一起复制即可。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM