Je souhaite importer une bibliothèque prédéfinie à l'aide de cet extrait CmakeLists.txt:
add_library(openssl-crypto
SHARED
IMPORTED )
set_target_properties(openssl-crypto
PROPERTIES
IMPORTED_LOCATION
${external_DIR}/libs/${Android_ABI}/libcrypto.so )
include_directories(${external_DIR}/include/openssl)
Je l'ai lié à ma bibliothèque en tant que:
target_link_libraries(aes-crypto openssl-crypto)
La tentative de génération renvoie cette erreur:
'/libs/arm64-v8a/libcrypto.so', needed by ..., missing and no known rule to make it
J'ai trouvé que le set_target_properties
la fonction n'aime pas les chemins relatifs.
À partir de Documentation CMake sur IMPORTED_LOCATION
Chemin d'accès complet au fichier principal sur le disque pour une cible IMPORTÉE.
Pour résoudre ce problème, j'ai plutôt utilisé le chemin d'accès complet à la bibliothèque.
Exemple:
set_target_properties ( curl-lib
PROPERTIES IMPORTED_LOCATION
libs/${Android_ABI}/libcurl.a )
. . . becomes . . .
set_target_properties ( curl-lib
PROPERTIES IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/src/main/cpp/libs/${Android_ABI}/libcurl.a )
Vous pouvez utiliser set_property
fonction avec attribut TARGET
au lieu de set_target_properties
, puis vous pouvez définir un chemin d'accès relativement à l'aide de macros ${PROJECT_SOURCE_DIR}
.
# import shared library libmylib.so
add_library( my-imported-lib
SHARED
IMPORTED)
# set the path to appropriate so files with appropriate architectures
set_property(TARGET
my-imported-lib
PROPERTY IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/<path_to_libs_directory>/${Android_ABI}/libmy-imported-lib.so)
...
# link imported library to your developed library
target_link_libraries( my-developed-lib
my-imported-lib )
Vous pouvez peut-être utiliser des macros ${PROJECT_SOURCE_DIR}
tout en définissant le chemin de la lib avec set_target_properties
mais je n'ai pas vérifié de cette façon.