【问题标题】:How to create a shared library for Android from Windows QtCreator如何从 Windows QtCreator 为 Android 创建一个共享库
【发布时间】:2021-11-18 13:32:18
【问题描述】:

我有什么


C++ 项目 - MyLibC 构建系统 CMake 3.14

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)

project(MyLibC LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library(MyLibC SHARED
  MyLibC.cpp
  MyLibC.h
)

target_compile_definitions(MyLibC PRIVATE MYLIBC_LIBRARY)

.cpp 和 .h 文件的类为空。

QtQuick 上的项目 - MyProjQt 构建系统 qmake

myprojqt.pro

QT += quick

CONFIG += c++14

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp \
        testclass.cpp

RESOURCES += qml.qrc

LIBS += -L"$$_PRO_FILE_PWD_/lib" -libmylibc

unix {
    ANDROID_EXTRA_LIBS=$$_PRO_FILE_PWD_/lib/libmylibc.so
}

win32 {
    INCLUDEPATH += "$$_PRO_FILE_PWD_/include"
    LIBS += "$$_PRO_FILE_PWD_/lib/libmylibc.dll"
}

TRANSLATIONS += \
    myprojqt_en_US.ts

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

HEADERS += \
    testclass.h

我已经做了什么

  1. 在 lib 项目 toolchain.cmake 中添加了 toolchain.cmake 文件

工具链.cmake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)
  1. 添加了启动 CMake 参数的标志 -DCMAKE_TOOLCHAIN_FILE=./toolchain.cmake ..
  2. 构建 lib 并接收 libmylibc.so
  3. 将 .so 和 .h 添加到 MyProjQt
  4. 已构建 MyProjQt 并遇到问题。

错误

:-1: ошибка: error: /lib/libmylibc.so:1:3: invalid character
:-1: ошибка: error: /lib/libmylibc.so:1:3: syntax error, unexpected $end
:-1: ошибка: error: /lib/libmylibc.so: not an object or archive

我做错了什么?

Qt 5.15.2
CMake 3.14.2
MinGW 8.1.0 64 位 C++
Android Clang(C++、arm、NDK 21.3.6528147)

附言
我已经做过一次,但我忘记了如何

【问题讨论】:

    标签: android c++ qt cmake qml


    【解决方案1】:

    qmake 项目中,您只需要

    TEMPLATE = lib
    

    它负责构建共享库。请注意,如果您想使用任何需要 Qt 事件循环的东西,则必须在加载共享库时实例化并执行 QCoreApplication。

    【讨论】:

    • 我正在使用带有工具链的 CMake 构建一个库,并在那里指定目标平台
    • @ИванБогданов 您如何在 CMake 中处理 Android 的 multiabi 构建?这与您的原始问题无关。只是想知道
    • 我正在使用 qmake 用于 Android 应用程序,以及 CMake 用于 Android 和 Windows 的跨平台构建库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多