使用Android NDK的共享库 我在共享库中编译了C++项目。我需要将Android中的库(.so文件)与NDK一起使用 P>这个想法是,其他人会编译C++项目并给我.so文件,这样我就不必在我的计算机上编译它。
我需要在我的Android.mk文件中引用.so文件,而我尝试的所有解决方案都不起作用。这就是我被困的地方 因此:使用Android NDK的共享库 我在共享库中编译了C++项目。我需要将Android中的库(.so文件)与NDK一起使用 P>这个想法是,其他人会编译C++项目并给我.so文件,这样我就不必在我的计算机上编译它。,android,android-ndk,shared-libraries,Android,Android Ndk,Shared Libraries,我需要在我的Android.mk文件中引用.so文件,而我尝试的所有解决方案都不起作用。这就是我被困的地方 因此: 在不为每个平台创建一个共享库的情况下,是否可以执行我所描述的操作 如何在我的Android.mk中引用我的.so库?我尝试的所有解决方案都不起作用 为了从头开始复制所有内容,我执行了以下步骤: < P> 1°)创建一个HeloWord C++项目: 测试h: #include <iostream> class Test { public:
- 在不为每个平台创建一个共享库的情况下,是否可以执行我所描述的操作
- 如何在我的Android.mk中引用我的.so库?我尝试的所有解决方案都不起作用
为了从头开始复制所有内容,我执行了以下步骤: < P> 1°)创建一个HeloWord C++项目:
- 测试h:
#include <iostream> class Test { public: Test(); ~Test(); static std::string getTest(); };
g++ -Wall -shared -fPIC -o libTest.so Test.cpp
<>这给了我一个LIbTest.SO文件,我可以在C++项目上使用它。现在我想在Android项目上使用它
3°)创建一个基本的空Android项目:
- 软件包:com.so.test
- 名称:CppTest
package com.so.test;
public class Test {
static {
System.loadLibrary("hellondk");
}
public native String getMessage();
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellondk
LOCAL_SRC_FILES := com_so_test_Test.cpp
include $(BUILD_SHARED_LIBRARY)
APP_STL := stlport_static
5°)打开终端并:
cd /path/to/my/android/project/app/src/main/java
javac com/so/test/Test.java
javah com.so.test.Test
这将创建“com_so_test_test.h”文件
6°)在“com_so_test_test.cpp”文件中添加以下代码:
9°)在“jni”文件夹中创建一个“Application.mk”文件,其中包含:
package com.so.test;
public class Test {
static {
System.loadLibrary("hellondk");
}
public native String getMessage();
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellondk
LOCAL_SRC_FILES := com_so_test_Test.cpp
include $(BUILD_SHARED_LIBRARY)
APP_STL := stlport_static
10°)返回终端,运行:
/path/to/your/ndk/ndk-build
这就是我被困的地方。我需要引用Android.mk中的libTest.so文件,但我尝试的所有解决方案都不起作用。有什么想法吗
编辑:以下是我得到的错误:
[arm64-v8a] Compile++ : hellondk <= com_so_test_Test.cpp
[arm64-v8a] SharedLibrary : libhellondk.so
./obj/local/arm64-v8a/objs/hellondk/com_so_test_Test.o: In function `Java_com_so_test_Test_getMessage':
/Users/timsandra/Desktop/CppTest/jni/com_so_test_Test.cpp:8: undefined reference to `Test::getTest()'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/arm64-v8a/libhellondk.so] Error 1
[arm64-v8a]Compile++:hellondk可能太晚了,但是从错误消息来看,看起来像是一个简单的打字错误?(6) #包含“Test.hpp”
应为#包含“Test.h”
。你的问题太完整了,我用它作为参考,让我的第一个android jni呼叫运行-谢谢你,伙计!问题从步骤2°开始。您为PC编译了Test.cpp。您必须使用NDK为Android交叉编译它。