【发布时间】:2015-12-09 00:04:35
【问题描述】:
几天以来,我一直在尝试为linenoise 编写一个Haxe hxcpp 包装器,它是用C 代码编写的;该库非常简单,并且标头还包含一个外部 C。我正在关注 snowkit linc macro template 但我无法编译 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) 实际上是一个微不足道的打印语句。
我还阅读了其他可能性,例如 CFFI for neko 在库周围创建一个包装器(我可能已经阅读了互联网上关于它的所有内容)但我想尽可能保持代码静态链接并与所有 hxcpp 目标兼容.
【问题讨论】:
-
它会更容易使用:`#ifdef _cplusplus extern C { #dendif #include
#ifdef _cplusplus } #endif -
linenoise.h 已经有了这样的环境,我想我应该能够将它编译为 C++,但是当我这样做时,我会得到额外的错误(比如通过将 void 指针分配给 char 指针等错误)在);这将需要我修改我想避免的原始库,以使包装器与香草库一起工作。我想知道是否有其他选择。
-
但是,当我使用 haxe 编译器时,我从未遇到过与 C++ 中的 C 类型相关的最后一个错误; haxe 编译器似乎从未尝试编译我的 C 库
-
haxe编译器是什么,在哪里可以找到? -
Haxe 是一种被翻译成 C++ 和其他目标的编程语言。我想在 Haxe 中为 linenoise C 库编写一个包装器。 Haxe 网:haxe.org