使用CMake在Android Studio中向NDK应用程序添加静态预构建库和GLESv2支持
这是一个由两部分组成的问题。 我目前正在将当前的构建设置(Eclipse;ndk build)转换为(希望)更好的(androidstudio;cmake)。 我之所以选择cmake,是因为我读到,这是在不需要实验性gradle插件的情况下让调试正常工作的唯一方法(如果你确定这是错误的,请让我知道) 好的,我要讨论的第一个问题就是链接静态预构建库,比如我必须使用的boost的预构建版本。 我通过使用以下策略获得了一些成功: 将库添加为全局搜索的静态预构建库:使用CMake在Android Studio中向NDK应用程序添加静态预构建库和GLESv2支持,android,android-studio,android-ndk,cmake,opengl-es-2.0,Android,Android Studio,Android Ndk,Cmake,Opengl Es 2.0,这是一个由两部分组成的问题。 我目前正在将当前的构建设置(Eclipse;ndk build)转换为(希望)更好的(androidstudio;cmake)。 我之所以选择cmake,是因为我读到,这是在不需要实验性gradle插件的情况下让调试正常工作的唯一方法(如果你确定这是错误的,请让我知道) 好的,我要讨论的第一个问题就是链接静态预构建库,比如我必须使用的boost的预构建版本。 我通过使用以下策略获得了一些成功: 将库添加为全局搜索的静态预构建库: add\u库(boost\u线程静态
add\u库(boost\u线程静态导入全局)
设置预构建库的位置:
设置\u目标\u属性(导入的boost\u线程属性\u位置boost/lib/libboost\u线程\u pthread-gcc-mt-s-1\u 55.a)
链接库时使用预构建库的存储值:
target\u link\u库(myprog${boost\u thread}…)
当我说我已经取得了一些成功时,我的意思是我看到一些错误消失了,但其他错误仍然存在(尽管它不再抱怨找不到要链接的库)。我漏了一步吗
第二个问题是我无法添加我看到的也是由NDK提供的GLESv2库。我似乎也找不到一个单一的来源来说明如何正确地做到这一点。我尝试过使用find_包
和find_库
,但没有成功。
我在Android.mk中只有LOCAL\u LDLIBS:=-lGLESv2
,所以我尝试了set(CMAKE\u CXX\u STANDARD\u LIBRARIES${CMAKE\u CXX\u STANDARD\u LIBRARIES}-lGLESv2)
,但这也不起作用(给我/bin/sh:-lGLESv2:找不到命令
)
第一个问题应该是非常普遍的,但似乎很少有文档说明应该如何解决。第二个问题可能不太常见,但可能仍然很常见,以至于我惊讶地发现如何设置它几乎没有帮助。我仍然存在构建问题,但就问题中提出的问题而言,我认为我有不错的解决方案: 要包括预构建的静态库:
添加库(boost\u regex静态导入)
set_target_properties(boost_regex properties导入_LOCATION/full/path/to/libboost_regex.a)#我使用${CMAKE_CURRENT_SOURCE_DIR}来确定完整路径
目标链接库(myproject…boost\u regex…
这似乎很有效 至于GLES2问题,我使用了我在问题评论中的内容:
#GLESv2
查找路径(GLES2\u包括目录GLES2/gl2.h)
提示${ANDROID\u NDK})
查找库(GLES2_库libGLESv2.so
提示${GLES2\u INCLUDE\u DIR}/./lib)
目标目录(myproject PUBLIC${GLES2\u include\u DIR})
目标链接库(myproject…${GLES2\u LIBRARY}…
您可以发布链接boost\u线程时仍然看到的错误吗?对于第二个问题,删除'-l'(cmake将自动添加此项),而不是更改cmake_CXX_标准_库
,并使用target_link_库
。我通过告诉cmake在android ndk中的何处查找GLE:GLESv2 find_path,成功地停止了gl错误(GLES2_INCLUDE_DIR GLES2/gl2.h hits${ANDROID_NDK})find_library(GLES2_libGLESv2.so hits${GLES2_INCLUDE_DIR}/./lib)target_INCLUDE_目录(myproject PUBLIC${GLES2_INCLUDE_DIR})target_链接库(myproject…${GLES2_library})
,但我不确定这是最简单/最好的方法