链接可执行到共享库(Android Studio 2.2)
CMake Link Executable to shared library (Android Studio 2.2)
我在新版Android Studio中创建了一个小的测试项目来测试新的c++支持。
我尝试从共享库调用函数。函数在另一个。cpp文件
中这是我的CmakeLists.txt文件的一部分:
add_library(JNI SHARED src/main/cpp/native-lib.cpp)
add_executable(testex src/main/cpp/test2.cpp)
INCLUDE_DIRECTORIES (src/main/cpp)
target_link_libraries(testex JNI)
test2.h文件:
class Test{
public:
int side;
intgetArea();
};
test2.cpp文件:
#include "test2.h"
int Test::getArea(){
return side*side;
}
和我的native-lib.cpp文件的一部分:
JNIEXPORT jstring JNICALL
.....(JNIEnv *env,jobject instance){
Test *test = new Test();
test->getArea();
.
.
.
我得到这些错误:错误:对Test::getArea()的未定义引用
clang++:错误:链接器命令失败,退出代码为1(使用-v查看调用)
ninja: build stopped: subcommand failed.
我希望有人能帮助我:)
Android CMake支持生成Java代码在运行时加载的共享库;共享库可以调用其他本地库(共享或静态)中的其他函数。android不支持jni框架中的本机可执行文件
看起来您正在尝试测试您的本机代码。一种可行的方法是使用googletest suite (https://cmake.org/cmake/help/v3.10/module/GoogleTest.html)进行JNI测试。
这里是关于google测试的github参考:https://github.com/google/googletest/blob/master/googletest/README.md
相关文章:
- Android Studio 中带有静态库的原生C++代码
- 如何在 Android Studio 4 中编译 C/C++ 原生代码
- Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++
- 更新后的Android Studio现在需要Clang,不再链接到GCC的库
- 如果我的手机是 ARMv8,为什么 Android Studio 会C++编译为 ARMv7?
- 将图像从 Android Studio 发送到 CPP
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- CMake:Android Studio 原生活动项目无法在项目根目录之外找到第三方库
- 如何在Android Studio中将C++文件正确链接到现有的Android项目?
- 在 Android Studio 中添加 C/C++ 的包含路径
- Android Studio-在现有的旧项目中启用本机C++调试(card.io Android Source)
- 为什么只有一个库的链接器错误'multiple definitions'?在 Android Studio 中使用 CMake (3.4.1)
- Android Studio 3.5.1 和 NDK 20.0 找不到 cstdint
- 如何使用Java Native Interface在C++中导入python库-Android Studio
- Android Studio External Native Build 预编译标头
- Android Studio TextView Init C++
- 向 cppFlags 添加"-O0"无法禁用 Android Studio 中的 clang 编译优化
- 如何将.cpp C++原生库导入 Android Studio
- Android Studio 链接器命令在包含 Boost 库时失败
- Android Studio:不一致的自动包含C++ stdlib 标头