seit ein paar Tagen versuche ich eine Haxe hxcpp Wrapper für linenoise schreiben, die in C-Code programmiert ist; Die Bibliothek ist sehr einfach und der Header enthält auch ein externes C. Ich bin der snowkit linc macro template folgt, aber ich bekomme keine Möglichkeit, das C-Modul zu kompilieren und dass es mit dem Rest des Projekts verknüpft, ich bin mir nicht sicher, wie es weiter geht .Erstellen eines Haxe hxcpp Wrapper für eine C-Bibliothek
Ich habe keine Probleme, den Code als C-Objekt zu kompilieren und es mit einer C-ausführbaren Datei in meinem System (OSX el Capitan) zu verbinden, also nehme ich an, dass ich in meinem haxe Projekt etwas falsch mache, vielleicht kann ich nicht wirklich Verknüpfen Sie hxcpp mit einer C-Bibliothek, indem Sie direkt den Build-Prozess von haxe verwenden, oder ich sollte es manuell pipen, indem Sie die Befehle per Hand schreiben.
@: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
Vor kurzem bin ich immer diese Fehlermeldung:
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)
Ich bin mir bewusst, dass dieser Fehler mehrere hat erwähnt, aber ich bin nicht sicher, wie das von haxe hxcpp im Kontext zu lösen.
Wenn ich eine C++ - Wrapper einschließlich der hxcpp.h als das typische Beispiel Linc verwenden, ist der Fehler immer noch der gleiche, und die Funktion, die ich hier deklariere (LinenoiseClearScreen) ist eigentlich eine triviale Druckanweisung.
Ich lese auch über andere Möglichkeiten wie CFFI für Neko, um einen Wrapper um die Bibliothek zu erstellen (ich habe alles im Internet darüber gelesen), aber ich wollte den Code statisch verknüpft halten, wenn möglich und kompatibel mit allen hxcpp Ziele.
wäre es viel einfacher zu bedienen sein: '#ifdef _cplusplus extern C {#dendif # include #ifdef _cplusplus} #endif –
user3629249
Die [linenoise.h] (https://github.com/antirez/linenoise/blob/master/linernoise.h # L42) hat schon diese Umgebung, ich nehme an, ich sollte in der Lage sein, es als C++ zu kompilieren, aber wenn ich das mache, bekomme ich zusätzliche Fehler (wie Fehler, indem ich einen void Zeiger auf char pointer anwähle); das würde erfordern, dass ich die ursprüngliche lib ändere, die ich vermeiden möchte, um den Wrapper mit einer Vanilla-Bibliothek arbeiten zu lassen. Ich frage mich, ob es dafür eine zusätzliche Option gibt. –
Wenn ich jedoch den haxe-Compiler benutze, habe ich nie die letzten Fehler in Bezug auf die C-Typen in C++ gefunden; Der haxe-Compiler scheint nie zu versuchen, meine C-Bibliothek zu kompilieren –