我很难将我的库包含在Android NDK构建中.
在创建虚拟cpp文件并使用shell中的直接g ++命令构建所有内容时,库已正确编译并正常工作.
当前的Android.mk文件不起作用,并抛出错误,无法找到相应的头文件(属于.a文件的一部分).
如何正确包含预构建的静态库?
我的Android.mk文件如下所示:
LOCAL_PATH := $(call my-dir)
# V8 Base
include $(CLEAR_VARS)
LOCAL_MODULE := v8_base
LOCAL_MODULE_FILENAME := v8_base_static
LOCAL_SRC_FILES := ../lib/libv8_base.a
include $(PREBUILT_STATIC_LIBRARY)
# V8 Nosnapshot
include $(CLEAR_VARS)
LOCAL_MODULE := v8_nosnapshot
LOCAL_MODULE_FILENAME := v8_nosnapshot_static
LOCAL_SRC_FILES := ../lib/libv8_nosnapshot.a
include $(PREBUILT_STATIC_LIBRARY)
# V8GL Runtime
include $(CLEAR_VARS)
LOCAL_MODULE := v8gl-runtime
LOCAL_SRC_FILES := main.c ../src/v8gl/v8gl.cpp
LOCAL_CPPFLAGS := -D__ANDROID__
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue v8_base v8_nosnapshot
# LOCAL_EXPORT_CPPFLAGS := -D__ANDROID__
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
Run Code Online (Sandbox Code Playgroud)
编译器输出如下,这是有道理的,但只显示我没有包含单个.a文件,我不知道为什么:
Compile++ thumb …
Run Code Online (Sandbox Code Playgroud) 我正在使用OpenGL实现重构我的V8并且遇到了执行上下文的问题.
这个概念如下:
V8GL::initialize()
此方法初始化上下文和全局模板.它还使用上下文来表示过剩,因为有几个循环运行,它们也暴露给JS上下文.(例如glut.mainLoop()
)
V8GL::execute(context, source, url)
此方法主要在给定上下文中执行字符串.我认为必须采用这种方式来隔离使用间隔/超时.
什么行不通:
V8GL::initialize()
还附加内置的JavaScript文件并执行它们.这完全没问题.
简化代码:
V8GL::initialize(...) {
v8::Persistent<v8::Context> context = v8::Context::New(NULL, globalTemplate);
v8::Context::Scope context_scope(context);
// cached for glut mainLoop etc.
GlutFactory::context_ = v8::Persistent<v8::Context>::New(context);
execute(context, v8::String::New(...script content...), v8::String::New(...script url path to show for exception stacktraces...);
// after all the stuff was dispatched to the global context, I want to cache the global object for later usage.
v8gl::global = v8::Persistent<v8::Object>::New(context->Global());
context->DetachGlobal();
context.Dispose();
}
V8GL::execute(context, source, filename) {
v8::HandleScope scope;
// Previously, I had …
Run Code Online (Sandbox Code Playgroud)