如何将静态库链接到NDK Android构建中用作本机库的源
How can I link a static library to a source used as an native library in NDK Android Build
我想包括一个为提供的C 代码构建的静态库,我尝试链接静态库,但构建无法链接库。我收到以下错误:
未定义的引用'test_c_interface'
我是Java NDK/Cmake的新手。请帮助我
这是使用的CPP代码(本机lib.cpp(
extern int Test_C_Interface();
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_tvgui_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) {
std::string hello = "From C++";
int ret_val;
ret_val = Test_C_Interface();
if(ret_val == 100){
hello = "From C";
}
return env->NewStringUTF(hello.c_str());
}
这是用于制作静态库的C代码(sampal.c/libsample.a([使用NDK ARM-V7A工具链构建的库]
#include<stdio.h>
int Test_C_Interface(void)
{
printf("Inside C Libraryn");
return 100;
}
这是cmake文件
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib
SHARED
native-lib.cpp)
find_library(
log-lib
log)
target_link_libraries(
native-lib
${log-lib}
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/libsample.a)
我需要从like构建一个应用程序:
libsample.a
====libnative-lib.so + Java = .apk
/
/
native-lib.cpp
更新通过修改代码如下:
来解决该问题:extern "C"{
int Test_C_Interface();
}
您应该根据您的ABI将libsample.a
放入以下结构中的目录中。
libs
│ ├── x86/libsample.a
│ ├── x86_64/libsample.a
│ ├── arm64-v8a/libsample.a
│ ├── armeabi-v7a/libsample.a
,然后如下更新您的cmakefile:
target_link_libraries(
native-lib
${log-lib}
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/<ANDROID_ABI>/libsample.a)
请确保${CMAKE_CURRENT_SOURCE_DIR}/../../../libs
是正确的路径。
对于cmake变量,例如ANDROID_ABI
,您可以参考CMake Build wool链中的Android NDK路径变量
您可以将Android-NDK样本作为示例(下面的示例(。这是指向Android Dev手册的链接 - 对本地库的解释。这是堆栈上的一个问题 - 链接。
在Ubuntu上,静态/共享库的路径在这里(这是Android-ndk示例(:
hello-jni/app/src/main/jnilibs/[处理器]/[您的库]
[包括库,java文件]
static {
System.loadLibrary("hello-jni");
}
[cmake file]
cmake_minimum_required(VERSION 3.4.1)
add_library(hello-jni SHARED
hello-jni.c)
#Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
android
log)
相关文章:
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- NDK - 包含一个预构建的库,并在 Android 项目中调用本机函数
- 从本机C++结构构建时,是否可以优化平面缓冲区序列化
- 如何使用本机Corert预览构建
- 使用本机C++构建简单的GUI,而无需借助QT或.NET
- 未能构建opencv jni示例-opencv示例-本机活动(未定义引用)
- 从无到有构建本机客户端应用程序
- 如何在Qt/C++中构建一个自定义的本机OSX webkit小部件
- 使用/CLR标志构建的本机dll包含托管类
- 构建快速Android应用程序- Java或本机