我想在我的项目中使用非Boost asio(http://think-async.com/)。该项目是用 C++ 编写的,我使用 dropbox/djinni 生成 Android 和 iOS 的包装器。在本机 C++ 中,asio 可以正常工作,无需包含 boost。但我还是停留在Android部分。
在 app/build.gradle 中我添加了以下几行:
路径/到/asio 标头
cppFlags += "-DASIO_STANDALONE"
当我构建项目时,它给了我以下错误:
编译 src.cpp 失败。
taps-api\asio\asio\impl\src.cpp:21:3: 错误:#warning“此文件已弃用。” [-Werror=cpp]
# 警告“此文件已弃用。”
^
taps-api\asio\asio\impl\src.cpp:22:3:错误:#warning“请改为 #include <asio/impl/src.hpp>。” [-Werror=cpp]
# 警告“请改为 #include <asio/impl/src.hpp>。”
^ 在 Taps-api\asio\asio\impl\src.cpp:25:0 包含的文件中:
Taps-api\asio/asio/impl/src.hpp:19:3:错误:#error 不要编译 Asio 库定义了 ASIO_HEADER_ONLY 的源
# 错误 不要编译定义了 ASIO_HEADER_ONLY 的 Asio 库源
有谁知道要做什么/添加什么?我还想问,我可以避免在我的项目(在 android/ios 中)中包含 boost headers/libs 吗?
我使用的是稳定的 Android Studio 1.3。我也发现了类似的问题,但这并不能解决我的问题。
我用djinni定义了一个C++接口:
member = interface +c {
get_id(): string;
get_name(): string;
}
Run Code Online (Sandbox Code Playgroud)
我继承的实现使用const getters,即
class MyMemeber: public Member {
private:
string id;
string name;
public:
string get_id() const override { return id; }
string get_name() const override { return name; }
}
Run Code Online (Sandbox Code Playgroud)
由于const属性,这显然无法编译.我可以教djinni用const getters生成基本接口吗?
有没有办法在Djinni的DSL中继承/扩展接口?
例如:
parent = interface +c {
parentMethod();
}
child1 = interface +c {
childMethod1();
}
child2 = interface +c {
childMethod2();
}
Run Code Online (Sandbox Code Playgroud)
我要继承child1和child2距离parent.
我有两个djinni接口,一个用Swift/objective C/java实现SwiftObj,另一个用C++实现CPPObj.
SwiftObj = interface +o +j {
someSwiftMethod();
}
CPPObj = interface +c {
static create(swiftObj: SwiftObj): CPPObj;
someCPPMethod();
}
Run Code Online (Sandbox Code Playgroud)
他们都有一个指向对方,所以SwiftObj就能够调用someCPPMethod()的CPPObj,反之亦然:CPPObj将能够调用someSwiftMethod()来自SwiftObj:
在快速:
var myCPPObj: SwiftObj!myCPPObj = MyCPPObj.create(self)myCPPObj.someCPPMethod()在c ++中:
shared_ptr<SwiftObj> mySwiftObj_; mySwiftObj_->someSwiftMethod();所以这里的问题是,由于循环引用,这些对象没有被垃圾收集(我尝试并删除了循环引用,并且它们得到了GCed).
但后来我尝试将其中一个指针设置为弱点.在C++中:weak_ptr<SwiftObj> mySwiftObj_;...但这使得mySwiftObj_它立即被GC,即使它实际上仍然存在于swift中.当我将swift指针设置为弱并且C++设置为强时,同样的事情发生了.
那么我该如何处理这种情况呢?(除了手动将其中一个指针设置为null).关于指针在djinni中如何实际工作的任何见解?
谢谢!
djinni ×4
c++ ×3
android ×1
android-ndk ×1
boost-asio ×1
const ×1
dropbox ×1
ios ×1
objective-c ×1
swift ×1