【问题标题】:Problem in compiling android-ndk code编译android-ndk代码的问题
【发布时间】:2011-08-03 08:29:50
【问题描述】:

我遇到了一个问题,想知道为什么会这样。

我有一个项目,它包含一个 Java 文件和一些 JNI & C++ 代码文件。我正在通过cygwin 构建JNI and C++ 代码,这是android ndk-tools 的一部分。以下是我的Android.mk 文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := cube
LOCAL_CFLAGS := -DANDROID_NDK
LOCAL_SRC_FILES := Testing.cpp
LOCAL_LDLIBS := -lGLESv1_CM
include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE := jni_opengl
LOCAL_SRC_FILES := jni_openglcube.cpp
LOCAL_SHARED_LIBRARIES := cube
include $(BUILD_SHARED_LIBRARY)

cube 上面的脚本中,模块是用标准C++ 编写的,它可以做一些opengl 的东西,jni_opengl 是用JNI 编写的。上面的脚本编译得很好,但是当我将第 8 行 include $(BUILD_SHARED_LIBRARY) 更改为 include $(BUILD_STATIC_LIBRARY) 时,我开始收到关于在 Testing.cpp 中找不到的 opengl 方法的错误。

我的问题是为什么在shared library的情况下,android能够找到opengl相关方法的引用,而当我将其更改为static library时为什么不能?

【问题讨论】:

    标签: android c++ java-native-interface android-ndk


    【解决方案1】:

    共享库中需要的符号有时会在运行时查找。所以,我认为你遇到了同样的问题,但现在在运行时不是链接时间。查看共享库的代码是否运行。

    【讨论】:

      【解决方案2】:

      我认为你不需要:

      LOCAL_LDLIBS := -lGLESv1_CM
      

      用于您的静态库。

      您需要将其移至您的共享库部分。没有它,静态部分会很好。

      别忘了改变:

      LOCAL_SHARED_LIBRARIES := cube
      

      LOCAL_STATIC_LIBRARIES := cube
      

      静态库只是一堆附加在一起的 .o 文件,因此它不会像共享库那样被“链接”。

      您最终的 Android.mk 应该如下所示:

      LOCAL_PATH := $(call my-dir)
      
      include $(CLEAR_VARS)
      LOCAL_MODULE := libcube
      LOCAL_CFLAGS := -DANDROID_NDK
      LOCAL_SRC_FILES := Testing.cpp
      include $(BUILD_STATIC_LIBRARY)
      
      
      include $(CLEAR_VARS)
      LOCAL_MODULE := jni_opengl
      LOCAL_SRC_FILES := jni_openglcube.cpp
      LOCAL_STATIC_LIBRARIES := libcube
      LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog
      include $(BUILD_SHARED_LIBRARY)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-08
        • 1970-01-01
        • 2012-05-29
        相关资源
        最近更新 更多