Добавьте статическую библиотеку (файл .a) в проект Android с помощью CMake, получите «CMake Error: CMake не может определить язык компоновщика для цели» - PullRequest
0 голосов
/ 23 октября 2018

Я генерирую статическую библиотеку из другого проекта Android, поэтому уверен, что они пригодны для использования.

Я получил четыре файла .a на основе архитектур ЦП, один файл .h, который также был протестирован.

Теперь в новом проекте другой файл .c хочет вызвать статическую библиотеку, я не могу объединить два проекта, статические библиотеки должны вызываться в формате .a.

Я получил "CMakeОшибка: CMake не может определить язык компоновщика для цели ", это мой CMakeLists.txt:

add_library(
    mylib
    STATIC
    src/main/jniLibs/arm64-v8a/libmylib.a
    src/main/jniLibs/armeabi-v7a/libmylib.a
    src/main/jniLibs/x86/libmylib.a
    src/main/jniLibs/x86_64/libmylib.a
)

target_link_libraries(
    native-lib
    mylib
)

mylib - это предварительно собранная библиотека.native-lib хочет вызвать mylib.

Также приветствуется ссылка о том, как добавить файл .a в проект из scrath.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018
add_library(
        my_static_lib
        STATIC
        IMPORTED
)
set_target_properties(features PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libmy_static_lib.a)

Как видите, я поместил эти .a файлы в

projectNmae\app\src\main\jniLibs\${ANDROID_ABI}\,

, если вы измените местоположение, не забудьте объявить его в CMakeList.txt.

Я помещаю my_static_lib.h в src\main\include и использую его в другом файле .c/cpp, например:

#include "../include/features.h"

Мой БОЛЬШОЙ ошибка пропущена:

${CMAKE_SOURCE_DIR}

CMake не может найти библиотеку STATIC в таких местах, как src/main/app/native-lib.c, SHARED библиотека в порядке, а не STATIC библиотека, котораяочень странно.

И ИМПОРТИРОВ. является обязательным условием, я попытался заменить его на полный путь к местоположению, не будет работать.

Спасибо всем за комментарии и ответы,Я надеюсь, что этот ответ может помочь новичкам, как я.

0 голосов
/ 23 октября 2018

Вы должны связать свои существующие статические библиотеки с вашей текущей общей библиотекой, то есть .so.Например, у вас есть src/c/dummy.c.Тогда ваш CMakeLists.txt должен выглядеть примерно так:

add_library(my-shared-lib SHARED src/c/dummy.c)

target_link_libraries(my-shared-lib -Wl, --whole-archive src/main/jniLibs/${ANDROID_ABI}/libmylib.a -Wl,--no-whole-archive)

Пояснения

  • ${ANDROID_ABI} - это переменная CMake для идентификации текущего строящегося ABI, т.е. arm64-v8a, arm64-v8a, x86, x86_64.
...