首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译android-ndk代码时出现问题

编译android-ndk代码时出现问题
EN

Stack Overflow用户
提问于 2011-08-03 16:29:50
回答 2查看 694关注 0票数 3

我正面临着一个问题,我想知道为什么会发生这种情况。

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

代码语言:javascript
复制
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的情况下,安卓能够找到opengl相关方法的引用,而当我将其更改为static library时,为什么不能

EN

回答 2

Stack Overflow用户

发布于 2011-08-04 03:34:17

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

票数 0
EN

Stack Overflow用户

发布于 2012-01-01 05:15:06

我不认为你需要:

代码语言:javascript
复制
LOCAL_LDLIBS := -lGLESv1_CM

用于您的静态库。

您需要将其移动到您的共享库部分。静态部分没有它也没问题。

别忘了改变:

代码语言:javascript
复制
LOCAL_SHARED_LIBRARIES := cube

代码语言:javascript
复制
LOCAL_STATIC_LIBRARIES := cube

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

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6923646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档