[英]Convert a gcc command to CMake for android ndk
I need to add ac project which can be compiled with gcc
as follows 我需要添加一个可以用gcc
编译的ac项目,如下所示
gcc -I/usr/include/epic5.1 -I/usr/include/i386-linux-gnu/epic5.1 -I./smproject/ -o code code.c ./smproject/smlib.so -lepic5.1
I have moved the code.c
files content to my Android NDK .cpp file (src/main/cpp/native-lib.cpp) and also moved all files inside smproject
directory to src/main/cpp/smproject/
directory 我已将code.c
文件内容移动到我的Android NDK .cpp文件(src / main / cpp / native-lib.cpp),并将smproject
目录中的所有文件移动到src/main/cpp/smproject/
目录
Here is my CMakeList.txt content 这是我的CMakeList.txt内容
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
include_directories( /usr/include/epic5.1 )
include_directories( /usr/include/i386-linux-gnu/epic5.1 )
include_directories( src/main/cpp )
set_target_properties( delorean PROPERTIES IMPORTED_LOCATION
src/main/cpp/smlib.so
)
add_library( smlib STATIC IMPORTED )
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
)
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log)
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, pre-built third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib}
smlib
)
I tried to follow Android NDK, CMake with other libraries but that didn't work for me it started throwing gradle error 我尝试跟随Android NDK,CMake与其他库,但这对我不起作用,它开始抛出gradle错误
tried following in build.gradle
file 尝试在build.gradle
文件中build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "in.etpg.sampleapp"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-I/usr/include/epic5.1 -I/usr/include/i386-linux-gnu/epic5.1 -lepic5.1 -frtti -fexceptions"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
Errors 错误
Error:cannot find -lepic5.1
Error:error: linker command failed with exit code 1 (use -v to see
Warning:warning: -lepic5.1: 'linker' input unused
Error:A problem occurred configuring project ':app'.
> executing external native build for cmake /Users/laptop.user/AndroidStudioProjects/SampleApp/app/CMakeLists.txt
You simply need to add something to your module build.gradle , like this 您只需要在模块build.gradle中添加一些内容 ,就像这样
ndk {
moduleName "code"
cFlags "-I/usr/include/epic5.1 -I/usr/include/i386-linux-gnu/epic5.1 -lepic5.1 -frtti -fexceptions"
ldLibs "log"
}
and place the source files in main/jni . 并将源文件放在main / jni中 。
Perhaps, you need to change cFlags
to cppFlags
, but I recommend that you search for more information about this, the suggestion is based on the fact that you have -fnoexceptions
flag, which is for c++. 也许,您需要将cFlags
更改为cppFlags
,但我建议您搜索有关此内容的更多信息,建议基于您具有-fnoexceptions
标志,这是针对c ++的。
You need of course libepic5.1.so
binary to use it for compilation, if you can add it's source code it will work. 你当然需要libepic5.1.so
二进制文件来使用它进行编译,如果你可以添加它的源代码它将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.