数日以来、 C コードでプログラムされたlinenoise用のHaxe hxcpp ラッパーを作成しようとしています。ライブラリは非常にシンプルで、ヘッダーには extern C も含まれています。snowkit linc マクロ テンプレートに従っていますが、C モジュールをコンパイルする方法がなく、それがプロジェクトの残りの部分とリンクしていることはわかりません。続ける方法。
コードを C オブジェクトとしてコンパイルし、システム (OSX el Capitan) の C 実行可能ファイルにリンクするのに問題はないので、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 ステートメントです。
neko がライブラリのラッパーを作成するための CFFI などの他の可能性についても読みました (インターネット上ですべて読んだ可能性があります)。