Как включить libsqlite3 в мою сборку Haxe / hxcpp?

У меня есть очень простой тест для включения SQLite3 в мою сборку Haxe (я знаю, что в него встроен 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 здесь?

1

Решение

Согласно hxcpp build XML документация, Я считаю, что вы должны заменить

<compilerflag value="-lsqlite3"/>

с

<flag value="-lsqlite3"/>

или же

<lib base="sqlite3"/>
2

Другие решения

Я не очень разбираюсь в использовании внешних библиотек CPP (так что это точно не отвечает на ваш вопрос), но я знаю, что реализация SQLLite встроена в Haxe (для cpp, hl, java, lua, macro, neko , php и python.) Вот некоторая сопутствующая документация:

Вот фрагмент (из этого полный пример суть.)

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");');

Обратите внимание, что ResultSet является Iterator<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.
}
0

По вопросам рекламы [email protected]