![如何在没有 qmlscene 的情况下创建跨平台的 Ubuntu Touch 应用程序?](https://linux22.com/image/886960/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%20qmlscene%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%88%9B%E5%BB%BA%E8%B7%A8%E5%B9%B3%E5%8F%B0%E7%9A%84%20Ubuntu%20Touch%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我学习了 C++ 和 Qt,能够创建跨平台应用程序。
我有一个非常简单的应用程序可执行文件可以在桌面上运行,但我不知道该怎么做让它在我的 Ubuntu 手机上运行。
我发现的所有应用程序示例都是通过执行的qmlscene
,但我不喜欢这种方法,因为我想让我的应用程序可在 Qt 支持的所有操作系统上运行。
以下是代码:
CMakeLists.txt
project(testapp) cmake_minimum_required(VERSION 2.8) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Qml REQUIRED) find_package(Qt5Quick REQUIRED) add_executable(${PROJECT_NAME} main.cpp main.qrc) qt5_use_modules(${PROJECT_NAME} Core Gui Qml Quick) install(TARGETS ${PROJECT_NAME} DESTINATION .) if(UNIX) add_subdirectory(ubuntu-package) endif(UNIX)
ubuntu-package/CMakeLists.txt
set(UBUNTU_MANIFEST_PATH "manifest.json.in" CACHE INTERNAL "Tells QtCreator location and name of the manifest file") set(APP_NAME "${PROJECT_NAME}") set(APP_ID "${PROJECT_NAME}.anonymous") set(ICON "${PROJECT_NAME}.png") set(EXEC "${PROJECT_NAME}") install(FILES "${PROJECT_NAME}.apparmor" "${ICON}" DESTINATION .) configure_file(manifest.json.in ${CMAKE_CURRENT_BINARY_DIR}/manifest.json) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifest.json DESTINATION .) set(DESKTOP_FILE_NAME "${PROJECT_NAME}.desktop") configure_file(${DESKTOP_FILE_NAME}.in ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE_NAME}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE_NAME} DESTINATION .)
main.cpp
#include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
main.qml
import QtQuick 2.4 import QtQuick.Window 2.1 import Ubuntu.Components 1.3 Window { minimumHeight: units.gu(80) minimumWidth: minimumHeight MainView { applicationName: "simpleapp" anchors.fill: parent Page { Button { anchors.centerIn: parent text: "Quit" onClicked: Qt.quit() } } } Component.onCompleted: show() }
当我尝试在 Qt Creator for armhf
kit 中构建它时,它会引发错误:
CMakeFiles/testapp.dir/main.cpp.o: undefined reference to symbol '__cxa_end_cleanup@@CXXABI_1.3'
/var/lib/lxd/containers/device-armhf/rootfs/usr/lib/arm-linux-gnueabihf/libstdc++.so.6 error: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
答案1
Ubuntu 手机上的应用都是开源的,大部分应用不使用qmlscene
.Terminal,例如:http://bazaar.launchpad.net/~ubuntu-terminal-dev/ubuntu-terminal-app/trunk/files
您可以克隆该存储库,自行编译并查看其如何完成。
至于undefined reference to symbol '__cxa_end_cleanup@@CXXABI_1.3'
- 似乎工具链出了问题。在 CMake 设置中设置CMAKE_VERBOSE_MAKEFILE
为ON
查看更多日志。或者看看您是否可以在没有 QtCreator 的情况下从该 LXD 容器中的命令行运行 CMake 构建(然后您可以摆弄单独的编译器和链接器命令)。