Я пытаюсь использовать Джинни для реализации разделяемой бизнес-логики для Android и iOS.Я продолжаю получать сообщение об ошибке для метода, который возвращает пользовательскую запись.Я использую следующее определение и реализацию IDL.
audio_book.djinni
audio_book = record {
id: i32;
title: string;
}
audio_book_service = interface +c {
static create(): audio_book_service;
fetch_audio_book(id: i32): audio_book;
}
, в результате которого были созданы следующие файлы:
audio_book.hpp
#pragma once
#include <cstdint>
#include <string>
#include <utility>
struct AudioBook final {
int32_t id;
std::string title;
AudioBook(int32_t id_,
std::string title_)
: id(std::move(id_))
, title(std::move(title_))
{}
};
audio_book_service.hpp
#pragma once
#include <cstdint>
#include <memory>
struct AudioBook;
class AudioBookService {
public:
virtual ~AudioBookService() {}
static std::shared_ptr<AudioBookService> create();
virtual AudioBook fetch_audio_book(int32_t id) = 0;
};
с моей реализацией:
audio_book_service_impl.h
#pragma once
#include <iostream>
#include "audio_book_service.hpp"
#include "audio_book.hpp"
class AudioBookServiceImpl : public AudioBookService {
public:
AudioBook fetch_audio_book(int32_t id) override ;
};
audio_book_service_impl.cpp
#include "audio_book_service_impl.h"
std::shared_ptr<AudioBookService> AudioBookService::create() {
return std::make_shared<AudioBookServiceImpl>();
}
AudioBook AudioBookServiceImpl::fetch_audio_book(int32_t id) {
AudioBook audioBook(1, "TEST");
return audioBook;
}
Когда я пытаюсь скомпилировать его для Android-проекта, он выдаст эту ошибку:
app/src/djinni/generated/jni/NativeAudioBookService.cpp:38: error: undefined reference to 'djinni_generated::NativeAudioBook::fromCpp(_JNIEnv*, lynen::AudioBook const&)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Почему он говорит, что он не определен?Для нативных типов компилируется без проблем.У кого-нибудь есть пример возврата пользовательских записей в джиннах или возникла такая же проблема?