Cmake: отсутствует и не известно, как это сделать, когда я импортирую предварительно созданную библиотеку
Я хочу импортировать предварительно созданную библиотеку, используя этот фрагмент 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)
Я связал это с моей библиотекой как:
target_link_libraries(aes-crypto openssl-crypto)
Попытка построить возвращает эту ошибку:
'/libs/arm64-v8a/libcrypto.so', needed by ..., missing and no known rule to make it
Ответы
Ответ 1
Я обнаружил, что функция set_target_properties
не любит относительные пути.
Из Документация CMake на IMPORTED_LOCATION
Полный путь к основному файлу на диске для цели IMPORTED.
Чтобы решить эту проблему, я использовал полный путь к библиотеке.
Пример:
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 )
Ответ 2
Вы можете использовать функцию set_property
с атрибутом TARGET
вместо set_target_properties
, а затем вы можете установить путь относительно с помощью макросов ${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 )
Возможно, вы можете использовать макросы ${PROJECT_SOURCE_DIR}
, пока устанавливаете путь lib с помощью set_target_properties
, но я не проверял этот путь.