当前位置 : 首页 » 互动问答 » 正文

如何在我的Haxe / hxcpp版本中包含libsqlite3?

分类 : 互动问答 | 发布时间 : 2018-04-27 16:08:16 | 评论 : 2 | 浏览 : 73 | 喜欢 : 0

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

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

@:包括( “sqlite3.h”)
@:本地( “sqlite3的”)
extern class DBPointer {

}

这不会引发任何Haxe错误,但是当我尝试编译时,我在C ++编译中遇到以下错误:

架构x86_64的未定义符号:
“_sqlite3_open”,引用自:
    main_obj :: main()在aea44ed0_Main.o中
找不到架构x86_64的ld:symbol(s)

我曾经想过,添加buildXml指令可以在这里看到足以动态引用macOS SQLite库,但事实似乎并非如此。

我如何才能在这里包含SQLite?

回答(2)

  • 1楼
  • 根据 hxcpp构建XML文档,我相信你应该替换

     <compilerflag value =“ -  lsqlite3”/>
    

    with

     <flag value =“ -  lsqlite3”/>
    

    or

     <lib base =“sqlite3”/>
  • 2楼
  • 我对使用CPP外部库不太了解(所以这并不能准确地回答你的问题),但我确实知道在Haxe中内置了一个SQLLite实现(对于cpp,hl,java,lua,macro,neko ,php和python平台)。这里有一些相关的文档:

    下面是一个片段(摘自完整示例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,
        名称NVARCHAR
      );
    “);
    
    var rs = conn.request('INSERT INTO artists_backup(name)VALUES(“John”);');
    

    请注意一个ResultSet is an Iterator <Dynamic> ,但是您可以在类型提示中使您的DB代码保持良好且类型安全:

     typedef RecordType = {name:String,id:Int };
    
    for(记录在(rs:Iterator <RecordType>)){
      //当记录仍然是一个Dynamic对象时,TypeDef别名告诉
      //编译器.name和.id是唯一有效的字段。
    }

相关阅读: