在從谷歌教程「添加C和C++代碼到您的項目」加入預建圖書館
在部分下面的代碼片段時的Android NDK的CMake默認的根目錄下的「添加其他預建圖書館」
add_library(...)
set_target_properties(# Specifies the target library.
imported-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
imported-lib/src/${ANDROID_ABI}/libimported-lib.so)
來源:https://developer.android.com/studio/projects/add-native-code.html
什麼是imported-lib/src/${ANDROID_ABI}/libimported-lib.so
相關的隱根目錄?
我的第一個猜測是它是project/app/
即CMakeLists.txt
所在的目錄,但實驗表明情況並非如此。當我做出這個假設時,我得到鏈接錯誤,說共享庫中的函數無法找到。
更新:
繼Tsyvarev的幫助下我已經意識到錯誤是不是從set_target_properties()
但target_link_libraries()
set_target_properties()
似乎使用project/app
作爲其根
但target_link_libraries()
沒有。如果我假設project/app
作爲我的預構建共享庫位置的根目錄,那麼我的項目構建失敗。如果我指定完整路徑,即從/home/me/...etc./etc./mylib.so
那麼它確實有效。
在第一實例中的錯誤信息是:
/home/me/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -llibs/armeabi-v7a/libmylib.so
也許在這種情況下,根目錄是其中ld
位於?
'我得到鏈接錯誤,說我在做這個假設時找不到共享庫中的函數。「 - 這個錯誤意味着你的共享庫沒有定義給定的函數。或者你忘了與該庫鏈接(使用'target_link_libraries')。如果鏈接程序未能找到鏈接的庫,則會發出**其他錯誤**。 – Tsyvarev