【问题标题】:QT Windows to Android necessity project changesQT Windows 到 Android 的必要性项目变更
【发布时间】:2016-02-29 15:30:51
【问题描述】:

我有一个使用 Crypto++、OpenSSL 和 QT 5.5.1 框架的项目。它适用于带有 MSVC 12.0 编译器的 x86 Qindows。

现在我想在 android 虚拟设备 Nexus S 上运行这个项目。我已经安装了 JDK、SDK、NDK,运行了用于 armebi 架构的 Nexus S、GCC 4.9 编译器和用于 Android armv5 的 QT 5.5.1。

Android 虚拟设备 (AVD) 启动并成功运行了一些示例,但我的程序没有以相同的方式运行。这是 .pro 文件:

#-------------------------------------------------
#
# Project created by QtCreator 2015-11-20T12:41:07
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = EPsimple
TEMPLATE = app

SOURCES += main.cpp\
    mainwindow.cpp \
    statusdialog.cpp \
    model.cpp \
    logindialog.cpp \
    threadedcontroller.cpp

HEADERS  += mainwindow.h \
    statusdialog.h \
    model.h \
    logindialog.h \
    threadedcontroller.h

FORMS    += mainwindow.ui \
    statusdialog.ui \
    logindialog.ui

INCLUDEPATH += C:\OpenSSL-Win32\include
INCLUDEPATH += C:\Users\niki\Downloads\cryptopp563rc5-1

debug{
LIBS += -LC:\Users\niki\Downloads\cryptopp563rc5-1\Win32\Output\Release \
-lcryptlib
LIBS += -LC:\OpenSSL-Win32\lib\VC \
-llibeay32MDd
}

release{
LIBS += -LC:\Users\niki\Downloads\cryptopp563rc5-1\Win32\Output\Debug \
-lcryptlib
LIBS += -LC:\OpenSSL-Win32\lib\VC \
-llibeay32MD
}

QMAKE_CXXFLAGS_RELEASE += /MD
QMAKE_CXXFLAGS_DEBUG += /MDd
#QMAKE_LFLAGS += /STACK:32000000
#QMAKE_LFLAGS += /HEAP:32000000

出现以下错误:

:-1: error: error: /MD: 没有这样的文件或目录

是否有必要为 GCC 4.9 编译器编译 cryptopp 和 openssl 库以及 /MD 和 /MT 选项会发生什么(它们仍然可用于 android)?整个代码可以看here(第二版)。

【问题讨论】:

  • 你应该开始一个干净的重建。接下来,您将需要用于 android 的库(或自己编译它们),并链接到这些库。
  • 你能帮我吗here。我已经下载了适用于 android 的 openssl,但它给了我collect2.exe:-1: error: error: ld returned 1 exit status

标签: android c++ qt openssl crypto++


【解决方案1】:

GCC 4.9编译器是否需要编译cryptopp和openssl库

是的。您可以设置 QT 项目以在环境下编译 Crypto++。或者,请参阅 Crypto++ wiki 上的 Android (Command Line)


QMAKE_CXXFLAGS_RELEASE += /MD
QMAKE_CXXFLAGS_DEBUG += /MDd

...
:-1: error: error: /MD: 没有这样的文件或目录

这是一个 Windows 编译器链接器开关。 /MD 指定与Multithreaded DLL version of the runtime library 的链接。您不应该将它用于 Android 项目。

听起来您需要在 QT 项目中添加新配置。最好的办法是创建一个新的 QT 项目并将它们分开。

我相信 Wei Dai 的 GitHub 有一个 Android.mk 的拉取请求。我们希望最终将其合并到库中。见Add Android.mk to build using android NDK。 (Wei 是 Crypto++ 的作者)。

【讨论】:

  • 谢谢noloader。我从您here 那里获取了cryptopp 的预编译版本,并从另一个地方获取了openssl,因为您丢失了。
  • @nicksona - 另见Add Android.mk to build using android NDK 拉取请求。我们希望最终添加它。
  • 我不知道 cryptopp 对 android 的工作有多好 - 可以看到我的线程 here。我认为这是库中的一些错误,但找不到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
相关资源
最近更新 更多