2017-06-16 140 views
0

在從谷歌教程「添加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位於?

+1

'我得到鏈接錯誤,說我在做這個假設時找不到共享庫中的函數。「 - 這個錯誤意味着你的共享庫沒有定義給定的函數。或者你忘了與該庫鏈接(使用'target_link_libraries')。如果鏈接程序未能找到鏈接的庫,則會發出**其他錯誤**。 – Tsyvarev

回答

1

根據對IMPORTED_LOCATION財產的文件,應該明確地指定爲完整路徑

完整路徑到磁盤上的主文件導入目標。

如果你想要這個路徑是電流源目錄下,與${CMAKE_CURRENT_SOURCE_DIR}/前面加上它。


指定相對路徑只是一個未定義的行爲

在你的情況下,CMake只是將路徑傳遞給鏈接器(即,鏈接器在系統庫目錄下搜索它並使用link_directories()命令添加)。但是,這種行爲,如未記錄的,可能在未來隨時更改。

+0

當前源代碼是哪個CMakeLists.txt駐留在。請參閱相關問題 - > https://stackoverflow.com/questions/15662497/in-cmake-what-is-the-difference-between-cmake-current-source- DIR-和cmake的-CURR – bph