cmake方式はサードパーティに導入する.a静的ライブラリおよびライブラリのコンパイル中にninja:error:'...//.//....//../src/libs/armeabi-v7a/xxx.a', needed by '../../.
android studio 2.2+以降ndk開発を統合し、cmakeコンパイラを持参した.ndkを書くときは、構成が簡単です.もうandroidはいらないmkプロファイル.
サードパーティのxxを追加する場合.aリンクライブラリは通常、サードパーティが提供するhフォルダをcppのincludeに格納します.これは規範で、必要ではありません.私のは置いていませんが、xxx.aライブラリは/src/main/libs/armeabi-v 7 a/ディレクトリの下に配置されます.
この記事ではlibspeexを追加します.a接続ライブラリを例1とする.まず/src/main/jniディレクトリの下にincludeフォルダを作成し、speexが公式に提供したヘッダファイルフォルダをincludeにコピーします.
2.appのsrcディレクトリのmainの下で、フォルダ、Libsを作成し、jniLibsの中にarmeabi-v 7 a(個人構成による)フォルダを作成します.そしてlibspeexをaリンクライブラリをコピーします.
3.第3のステップでは、ダイナミックライブラリがヘッダファイルにコピーされる場合、コンパイラに関連付けるように伝える必要があります.appディレクトリのsrcフォルダの下にCMakeListsがあります.txtファイル、私達はそれを通じて構成情報を編纂してspeexヘッダファイルの所在するディレクトリをコンパイルに教えて、中で追加します
リンクライブラリが2つあるので、2つ追加します.
コンパイラに伝えてaどのディレクトリの下にあるか、リンクライブラリの名前を指定して追加します.
(この経路は必ずよくチェックして、書き間違えたら次のような間違いが出て、呆然とした顔をしています)
3.1 CMakeコンパイル時報エラーninja:error:......missing and no known rule to make itCMakeコンパイル時報エラーninja:error:......missing and no known rule to make it
Build command failed. Error while executing process D:\SDK\cmake\3.10.2.4988404\bin\cmake.exe with arguments {--build C:\Users\DELL\Desktop\sample_0820_videook\sample\app\.externalNativeBuild\cmake\debug\armeabi-v7a --target native-lib} ninja: error: '../../../../src/libs/armeabi-v7a/libspeex.a', needed by '../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so', missing and no known rule to make it
この問題は一般的にCMakeListsである.txtの構成パスが間違っています.ダイナミックライブラリ/静的ライブラリのパス、ヘッダファイルのパスをチェックしてください.
4.0 .ステップ4でtarget_を変更しますlink_libraries、jsoncppを1行追加
4.1このような追加は複数あります:(ネット上のインスタンス、リンク:https://www.cnblogs.com/fnlingnzb-learner/p/7593488.html)
そしてビルドはすぐに
サードパーティのxxを追加する場合.aリンクライブラリは通常、サードパーティが提供するhフォルダをcppのincludeに格納します.これは規範で、必要ではありません.私のは置いていませんが、xxx.aライブラリは/src/main/libs/armeabi-v 7 a/ディレクトリの下に配置されます.
この記事ではlibspeexを追加します.a接続ライブラリを例1とする.まず/src/main/jniディレクトリの下にincludeフォルダを作成し、speexが公式に提供したヘッダファイルフォルダをincludeにコピーします.
2.appのsrcディレクトリのmainの下で、フォルダ、Libsを作成し、jniLibsの中にarmeabi-v 7 a(個人構成による)フォルダを作成します.そしてlibspeexをaリンクライブラリをコピーします.
3.第3のステップでは、ダイナミックライブラリがヘッダファイルにコピーされる場合、コンパイラに関連付けるように伝える必要があります.appディレクトリのsrcフォルダの下にCMakeListsがあります.txtファイル、私達はそれを通じて構成情報を編纂してspeexヘッダファイルの所在するディレクトリをコンパイルに教えて、中で追加します
include_directories(# ,
src/main/jni/include/speex
src/main/jni/include/libspeex
)
リンクライブラリが2つあるので、2つ追加します.
コンパイラに伝えてaどのディレクトリの下にあるか、リンクライブラリの名前を指定して追加します.
add_library(speex
STATIC
IMPORTED ) # , CMAKE
set_target_properties( speex
PROPERTIES IMPORTED_LOCATION
"${CMAKE_SOURCE_DIR}/src/main/libs/${ANDROID_ABI}/libspeex.a")
(この経路は必ずよくチェックして、書き間違えたら次のような間違いが出て、呆然とした顔をしています)
3.1 CMakeコンパイル時報エラーninja:error:......missing and no known rule to make itCMakeコンパイル時報エラーninja:error:......missing and no known rule to make it
Build command failed. Error while executing process D:\SDK\cmake\3.10.2.4988404\bin\cmake.exe with arguments {--build C:\Users\DELL\Desktop\sample_0820_videook\sample\app\.externalNativeBuild\cmake\debug\armeabi-v7a --target native-lib} ninja: error: '../../../../src/libs/armeabi-v7a/libspeex.a', needed by '../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so', missing and no known rule to make it
この問題は一般的にCMakeListsである.txtの構成パスが間違っています.ダイナミックライブラリ/静的ライブラリのパス、ヘッダファイルのパスをチェックしてください.
4.0 .ステップ4でtarget_を変更しますlink_libraries、jsoncppを1行追加
target_link_libraries( # Specifies the target library.
native-lib
speex
# Links the target library to the log library
# included in the NDK.
${log-lib} )
4.1このような追加は複数あります:(ネット上のインスタンス、リンク:https://www.cnblogs.com/fnlingnzb-learner/p/7593488.html)
# json
add_library(jsoncpp STATIC IMPORTED)
set_target_properties(jsoncpp
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libjsoncpp.a)
# curl
add_library(curl STATIC IMPORTED)
set_target_properties(curl
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcurl.a)
# (md5, base64, des, aes , asa) part-1
add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcrypto.a)
# (md5, base64, des, aes , asa) des part-2
add_library(ssl STATIC IMPORTED)
set_target_properties(ssl
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libssl.a)
target_link_libraries(native-lib
jsoncpp
curl
crypto
ssl
${log-lib})
そしてビルドはすぐに