当前位置:  开发笔记 > 编程语言 > 正文

为C库创建Haxe hxcpp包装器

如何解决《为C库创建Haxehxcpp包装器》经验,为你挑选了1个好方法。

因为几天我试着写一个用于线路编码的Haxe hxcpp包装器,用C代码编程; 该库非常简单,标题还包含一个extern C.我遵循snowkit linc宏模板,但是我无法获得编译C模块的方法,并且它与项目的其余部分链接,我不确定怎么继续

我没有问题将代码编译为C对象并将其与我的系统中的C可执行文件(OSX el Capitan)链接,因此我假设我在haxe项目中做错了,也许我无法真正将hxcpp链接到C库直接使用来自haxe的构建过程,或者我应该通过手动编写命令来手动管道.

@:keep
@:structAccess
@:include('linenoise.h')
#if !display
@:build(linc.Linc.touch())
@:build(linc.Linc.xml('linenoise'))
#end

extern class LineNoise {
 @:native("linenoiseClearScreen")
 static function linenoiseClearScreen(): Void;
} //LineNoise

最近我收到此错误:

g++ -o Test-debug -stdlib=libstdc++ -framework Cocoa -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -m64 @/Users/vresko/projects/linenoise/test/cpp/obj/darwin64-debug/all_objs 

Undefined symbols for architecture x86_64: 

 "_linenoiseClearScreen", referenced from: 

 Test_obj::main() in ab184b9a_Test.o 

ld: symbol(s) not found for architecture x86_64 

clang: error: linker command failed with exit code 1 (use -v to see invocation)

我知道这个错误有几个提及,但我不知道如何在haxe hxcpp的上下文中解决这个问题.

如果我使用包含hxcpp.h的C++包装器作为典型的linc示例,那么错误仍然是相同的,我在这里声明的函数(linenoiseClearScreen)实际上是一个简单的print语句.

我还读到了其他可能性,例如CFFI为neko创建了一个围绕库的包装器(我可能已经在互联网上阅读了所有关于它的内容)但是我希望尽可能保持代码静态链接并与所有hxcpp目标兼容.



1> Michael Bick..:

听起来你在设置hxcpp的依赖关系时错过了一个步骤,在你的情况下是linenoise.hxcpp不知道.c文件.

这显然在空模板中丢失,因为没有使用实际依赖项.

无论如何,我是https://github.com/snowkit/linc_enet的作者,这是针对hxcpp的ENet的绑定.它可能会帮助您将您的设置与更完整的示例进行比较.

在这种情况下,作为依赖项的ENet被设置为lib-folder中的特殊hxcpp git子模块.它可以在这里找到native-toolkit的一部分:https://github.com/native-toolkit/enet

你应该看看的是2个xml文件defines.xmlfiles.xml.它们基本上描述了hxcpp的依赖性.你可以直接复制'粘贴那些,修改linenoise文件的定义和列表.

另外,我不建议linenoise.h直接@:include在绑定中包含.Linc-libraries在此级别使用间接(请参阅-root中的linc-folder linc_enet)以允许C++的绑定的扩展/帮助程序,而不会触及实际的依赖项.

如果您遵循该概念,请查看linc/linc_enet.xml将所有内容绑定在一起进行编译的位置.


自2009年以来我一直在使用Haxe,随着时间的推移,我有点习惯于几乎没有文档.有时令人非常沮丧.最后,我研究了[Hugh Sanderson的博客](http://gamehaxe.com/tag/hxcpp)(hxcpp的作者)和hxcpp本身,它实际上只是一个neko脚本解析和设置编译的输入.一旦你深入研究它并不复杂.对于未来,您可能想要查看Haxe和snowkit-collective(snowkit.org)的gitter-channels.那里有很多有用的Haxers.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有