我是Android Studio的新手。我已经构建了一个c ++项目,其中包含.cc
和.h
个文件。但我想通过Android Studio 2.2开发的应用来执行它们。我已经搜索了Add C and C++ Code to Your Project之类的教程,以了解如何撰写CMakeLists.txt
。
这是我的CMakeLists.txt
:
cmake_minimum_required(VERSION 3.4.1)
INCLUDE_DIRECTORIES(src/main/include/)
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
)
add_library(
UnitTest
STATIC
src/main/cpp/UnitTest.cc
)
add_library(
CaffeEva
STATIC
src/main/cpp/CaffeEva.cc
)
add_library(
CaffeEvaWrapper
STATIC
src/main/cpp/CaffeEvaWrapper.cc
)
add_library(
BmpImgIO
STATIC
src/main/cpp/BmpImgIO.cc
)
add_library(
BlasWrapper
STATIC
src/main/cpp/BlasWrapper.cc
)
add_library(
CaffePara
STATIC
src/main/cpp/CaffePara.cc
)
find_library(
log-lib
log )
target_link_libraries(
native-lib
UnitTest
CaffeEva
CaffeEvaWrapper
BmpImgIO
BlasWrapper
CaffePara
${log-lib} )
编译我的源.cc
文件和.h
文件。
我的目的是调用JNI UnitTest::UT_CaffeEvaWrapper();
中涉及的函数UnitTest.cc
来将其结果发布到我的Android手机上。
即使我使用谷歌提供的演示HellpJNI
进行了一些更改,例如添加我自己的文件,也会显示错误:
Unfortunately, Q_CNN has stopped.
但是make build可以没有任何错误。我不知道如何制作它。那么有谁可以帮助我吗?指定的教程也行。提前谢谢!
答案 0 :(得分:0)
我已经逐步调试了我的程序。我发现导致此问题的文件目录路径错误。我的文件夹是:
const std :: string kClsNameFilePath =" /home/zz/AndroidStudioProjects/Q_CNN/app/src/main/assets/Cls.Names/class_names.txt" ;; const std :: string kImgLablFilePath =" /home/zz/AndroidStudioProjects/Q_CNN/app/src/main/assets/Cls.Names/image_labels.txt" ;; const std :: string kBmpFilePath =" /home/zz/AndroidStudioProjects/Q_CNN/app/src/main/assets/Bmp.Files/ILSVRC2012_val_00000009.BMP" ;;
但是当我调试时,我发现
FILE * inFile = fopen(filePath.c_str()," r");
指针inFile为null。我不知道如何解决这个问题。
最后,我通过将我的文件放在手机下解决了这个问题!以下步骤是访问你的SD卡!你还应该通过在AndroidManifest.xml中添加行来打开权限