5

数日以来、 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 などの他の可能性についても読みました (インターネット上ですべて読んだ可能性があります)。

4

1 に答える 1