首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为C库创建hxcpp包装器

为C库创建hxcpp包装器
EN

Stack Overflow用户
提问于 2015-12-09 00:04:35
回答 1查看 1.8K关注 0票数 5

由于有几天我试图为林诺瓦编写一个林诺瓦的hxcpp包装器,它是用C代码编写的;库非常简单,头也包含一个extern C。我遵循斯诺工具包linc宏模板,但无法找到编译C模块的方法,它与项目的其余部分链接,我不确定如何继续。

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

代码语言:javascript
运行
复制
@: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

最近,我收到了以下错误:

代码语言:javascript
运行
复制
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)

我知道这个错误有几次提到,但我不知道如何在hxcpp上下文中解决这个问题。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 06:31:42

听起来,在为hxcpp设置依赖项(在您的例子中是linenoise )时,您遗漏了一个步骤。hxcpp不知道.c-文件。

这在空模板中明显缺失,因为没有实际使用的依赖项。

总之,我是enet的作者,它是hxcpp的ENet绑定。它可能会帮助您将您的设置与更完整的示例进行比较。

在本例中,ENet作为依赖项被设置为lib文件夹中的一个特殊的hxcpp git子模块。它可以在这里作为本机工具包:https://github.com/native-toolkit/enet的一部分找到。

您应该查看的是2 xml-文件defines.xmlfiles.xml。它们基本上描述了hxcpp的依赖关系。您可以按字面复制粘贴这些文件,调整文件的定义和列表,以实现线性化。

另外,我不建议直接通过linenoise.h在绑定中包括@:include。Linc-库在这个级别使用间接(参见linc-folder in linc_enet-root),允许扩展/帮助/用于C++端的绑定,而不触及实际的依赖项。

如果您遵循这个概念,请参阅linc/linc_enet.xml,其中所有内容都绑定在一起进行编译。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34168457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档