2016-12-02 62 views
3

我写了一个haxe程序,它试图与远程服务器进行通信。我能够成功地编译成C++目标。可执行文件在我的系统上运行得很好。然而,当我尝试在另一个窗口框上运行一样,它失败,出现以下错误Haxe - 创建一个C++独立可执行文件

错误:无法加载模块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 /斌/窗/ std.lib$ HXCPP /bin/Windows/zlib.lib $ HXCPP/bin/Windows/regexp.lib user32.lib

从其他操作系统,compile + link命令将是不同的。这是一个适用于Mac:

G ++ ExampleMain.cpp CPP /试验debug.a $ HXCPP /斌/ MAC/regexp.a$ HXCPP /斌/ MAC/std.a $ HXCPP /斌/ Mac的/zlib.a

如果要添加其他静态库除了这3(例如,NME),你会 需要用“-Dstatic_link”标志编译这些过了,叫他们“register_prims” 初始化呼叫。包含额外的静态库将需要链接行中的库 ,并且可能需要链接其他依赖关系。 另请注意,可能存在与第三方库静态链接 的许可问题。

回答

3

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

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

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

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

相关问题