gpt4 book ai didi

android - 为android编译程序集

转载 作者:行者123 更新时间:2023-12-02 04:00:53 25 4
gpt4 key购买 nike

我发现 Vikram Aggarwal 的一篇文章讨论了将汇编代码链接到 Android 的 NDK,其中甚至有一些示例代码展示了如何将 C++ 代码与汇编连接。
(见http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html)

我的问题是我想使用相同的函数,但不是从 JNI stub 类调用它,而是想从我的私有(private)类调用我的 Assembly 函数。

但是在编译时,我得到了错误:

error: 'armFunction' was not declared in this scope

有没有人试过这个或知道如何解决这个问题?

编辑:

生成文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := quake3

# I want ARM, not thumb.
LOCAL_ARM_MODE := arm

LOCAL_SRC_FILES := \
multiple.s \
macros.h \
math/Vector2.cpp\
math/Vector3.cpp\
math/plane.cpp\
engine/frustum.cpp\
engine/BoundingVolume.cpp\
engine/camera.cpp\
camera-proxy.cpp\

LOCAL_CFLAGS := -DANDROID_NDK \
-DDISABLE_IMPORTGL \

LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog
#LOCAL_LDLIBS := -llog -lGLESv2

APP_STL := gnustl_static
APP_CPPFLAGS := -S -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a

include $(BUILD_SHARED_LIBRARY)

cpp文件中的函数调用:
void
Java_surreal_quake3_engine_Camera9_nativeGetDirection(JNIEnv* env, jobject thiz)
{
//Camera* camera = (Camera*) env->GetIntField(thiz, pointerID);

// get the _Z as the Vector3 java object
jfieldID vector_fID = env->GetFieldID(cls, "_Z", "Lsurreal/libs/math/Vector3;");
jobject vector_obj = env->GetObjectField(thiz, vector_fID);

// call the setter methods on the _vecEye
//jclass vectorClass = env->FindClass("surreal/libs/math/Vector3");
jmethodID vector3_set = env->GetMethodID(vector3Class, "set"/*method-name*/, "(FFF)V" /*method-signature*/);
env->CallVoidMethod(vector_obj, vector3_set, camera->getZ().x, camera->getZ().y, camera->getZ().z);

int result = armFunction();
}

最佳答案

看类的代码,好像你调用了函数,但是我看不到它的任何声明,所以无法识别。所以你需要在调用它之前声明函数的原型(prototype)(在 C++ 类中):

就像是:

int armFunction(void); // << declaration

void Java_surreal_quake3_engine_Camera9_nativeGetDirection(JNIEnv* env, jobject thiz)
{
// snip - snap
int result = armFunction(); // << your function call
}

关于android - 为android编译程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com