使用Android NDK项目。该项目正在使用CMake构建C ++库。
该库具有以下结构 -
内容如下:
的main.cpp
#include <jni.h>
#include <string>
#include <hello.h>
#include <world.h>
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_test_myapplication_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string str = hello() + world();
return env->NewStringUTF(str.c_str());
}
main.cpp的CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
add_subdirectory(src/main/cpp/hello)
include_directories(src/main/cpp/hello)
add_subdirectory(src/main/cpp/world)
include_directories(src/main/cpp/world)
target_link_libraries( # Specifies the target library.
native-lib
hello
world)
world.h
#include <string>
std::string world();
world.c
#include "world.h"
std::string world() {
return std::string("world");
}
的CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (world)
add_definitions(/DVERSION="0.4.0")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os")
include_directories(include/)
set(SOURCES
src/world.c
include/world.h
)
add_library(world STATIC IMPORTED
${SOURCES}
)
target_include_directories(world PUBLIC ./)
&#34;你好&#34;的内容是相同的。库唯一的区别是hello函数返回的输出。
现在,我对CMake的体验几乎不存在,我无法让它发挥作用。我在构建它时经常遇到错误。最新的错误如下 -
src / main / cpp / hello / CMakeLists.txt中的CMake错误:19 (target_include_directories):无法为其指定包含目录 导入目标&#34;你好&#34;。 CMake错误 src / main / cpp / world / CMakeLists.txt:19(target_include_directories):
指定包含目录
无法为导入的目标&#34; world&#34;。
我无法找到将所有内容编译成将在应用中使用的简单库的方法。有时我得到&#34;找不到&#34;,有时它无法找到头文件等。
如果有人能够发布一个简单的结构,并且因为我失去了正确的方式,那我就会知道。
在实际项目中,我尝试使用libmicrohttpd,但再一次,它不能使它工作。我尝试过使用CentOS的库,但Android Studio似乎使用了系统的库,导致事情搞砸了。这就是我下载库并尝试通过Android Studio编译它的原因。
所以,再次,如果有人能够找到一种方法将所有3个库一起编译成一个连接其他2个(hello,world)的库(main),我会非常熟悉它
非常熟悉。