如何在我的Haxe / hxcpp构建中包含libsqlite3?

时间:2017-11-01 22:19:39

标签: c++ haxe hxcpp

我有一个非常简单的测试,在我的Haxe构建中包含SQLite3(我知道它内置了SQLite,但这个问题并不适用于此处)。它看起来像这样:

@:include("sqlite3.h")
@:buildXml('<files id="haxe" append="true"><compilerflag value="-lsqlite3"/></files>')
extern class SQLite3 {
    @:native("sqlite3_open") public static function sqlite3_open(path: String, outReference:Reference<DBPointer>):Int;
}

@:include("sqlite3.h")
@:native("sqlite3")
extern class DBPointer {

}

这并没有抛出任何Haxe错误,但是当我尝试编译时,我在C ++编译中遇到以下错误:

Undefined symbols for architecture x86_64:
"_sqlite3_open", referenced from:
    Main_obj::main() in aea44ed0_Main.o
ld: symbol(s) not found for architecture x86_64

我认为添加buildXml指令可以看到有足够的动态引用macOS SQLite库,但似乎并非如此。

我如何在这里包括SQLite?

2 个答案:

答案 0 :(得分:2)

根据hxcpp build XML documentation,我认为你应该替换

<compilerflag value="-lsqlite3"/>

<flag value="-lsqlite3"/>

<lib base="sqlite3"/>

答案 1 :(得分:0)

我不太了解使用CPP外部库(所以这并不能准确回答你的问题),但我知道一个SQLLite实现是内置到Haxe中的(对于cpp,hl,java,lua,宏,neko,php和python平台。)以下是一些相关的文档:

这是一个片段(来自此full example gist。)

var conn = sys.db.Sqlite.open("test.db");

var rs = conn.request('
  CREATE TABLE IF NOT EXISTS artists_backup
  (
    artistid INTEGER PRIMARY KEY AUTOINCREMENT,
    name NVARCHAR
  );
');

var rs = conn.request('INSERT INTO artists_backup (name) VALUES ("John");');

请注意,ResultSetIterator<Dynamic>,但您可以输入类型提示以保持数据库代码的良好和类型安全:

typedef RecordType = { name:String, id:Int };

for (record in (rs:Iterator<RecordType>)) {
  // While record is still a Dynamic object, the TypeDef alias tells
  // the compiler that .name and .id are the only valid fields.
}