【问题标题】:Haxe - Create a C++ Stand-alone executableHaxe - 创建 C++ 独立可执行文件
【发布时间】:2017-04-17 06:18:06
【问题描述】:

我编写了一个尝试与远程服务器通信的 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” 初始化调用。包含额外的静态库将需要该库 在链接行中,并且可能需要链接其他依赖项。 另请注意,静态链接可能存在许可问题 第三方库。

【问题讨论】:

    标签: c++ haxe haxelib hxcpp


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我尝试在另一台 Linux 机器(具有相同的处理器架构 x86_64)上从 code.haxe.org/category/beginner/hello-world.html 运行 haxe HelloWorld,但失败并出现以下错误:./HelloWorld: /lib/libstdc++.so。 6:未找到版本“GLIBCXX_3.4.21”(./HelloWorld 要求)我尝试添加您提到的导入,但它没有改变任何东西。你能帮助我吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2012-03-31
    相关资源
    最近更新 更多