【问题标题】:Cannot build Qt 5.4 for Windows Embedded Compact 7无法为 Windows Embedded Compact 7 构建 Qt 5.4
【发布时间】:2014-12-30 13:19:40
【问题描述】:

我正在努力为 WEC 构建 Qt 5.4。我正在使用 Toradex SDK (http://developer.toradex.com/software-resources/arm-family/windows-ce/development-tools#Visual_Studio_2008)。我可以使用“Configure –platform win32-msvc2008 –xplatform wince70embedded-armv4i-msvc2008”对其进行配置,但构建失败并出现许多链接问题,如下所示:

moc_qabstractitemmodel.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qstringlistmodel.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qeventdispatcher_win_p.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 Qt5Cored_pch.obj : error LNK2019: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::Lockit(void)” (_imp??1_Lockit@std@@QAA@XZ) referenced in function “public: __cdecl std::_String_const_iterator<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::_String_const_iterator<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(void)” (??1?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAA@XZ)
 moc_qtimeline.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qfilesystemwatcher_p.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qfilesystemwatcher_polling_p.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qfilesystemwatcher_win_p.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qxmlstream.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qabstractanimation_p.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qfuturewatcher.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 moc_qeasingcurve.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimetypeparser.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimemagicrule.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimeglobpattern.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimeprovider.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qsignaltransition.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qeventtransition.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimedatabase.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qmimetype.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qstate.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qfinalstate.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qhistorystate.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qabstracttransition.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)
 qeventdispatcher_win.obj : error LNK2001: unresolved external symbol “__declspec(dllimport) public: __cdecl std::Lockit::~_Lockit(void)” (_imp_??1_Lockit@std@@QAA@XZ)

然后它最终失败:

....\lib\Qt5Cored.dll : 致命错误 LNK1120: 24 unresolved externals

我正在遵循这些指令http://doc.qt.io/qt-5/install-wince.htmlhttp://doc.qt.io/qt-5/windowsce-customization.htmlhttp://doc.qt.io/qt-5/requirements-wince.html

nmake 的完整输出可以在这里找到https://onedrive.live.com/redir?resid=C4C880935B574748!90413&authkey=!ALtPVXdc7CKS1Uk&ithint=file,txt

这是我一直在努力解决这个问题的第三天,我终于用完了可以尝试的东西,请帮忙!

编辑: 我想我应该从一开始就添加这个,但这是我想出的 qmake.conf:

# qmake configuration for Windows Embedded Compact 7 with VS2008 on ARM targets
#
# This is just a template for creating WEC7 mkspecs for ARM targets
# Replace the SDK name with actual SDK name.

include(../common/wince/qmake.conf)

CE_SDK                  = SDK2wince7
CE_ARCH                 = ARMV4I

DEFINES                += QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x700 $$CE_ARCH _AMRV7_ armv7 _ARM_

QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:WINDOWSCE,7.00 /MACHINE:THUMB /ENTRY:mainACRTStartup
QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWSCE,7.00 /MACHINE:THUMB
QMAKE_LFLAGS_DLL        = /SUBSYSTEM:WINDOWSCE,7.00 /MACHINE:THUMB /DLL /SAFESEH:NO
QMAKE_LIBFLAGS_RELEASE  = /LTCG
QMAKE_LIBS              = corelibc.lib coredll.lib
QMAKE_LIBS_CORE         = corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib
QMAKE_LIBS_GUI          = ceshell.lib ole32.lib $$QMAKE_LIBS_CORE
QMAKE_LIBS_NETWORK      = ws2.lib $$QMAKE_LIBS_GUI
QMAKE_LIBS_OPENGL       =
QMAKE_LIBS_COMPAT       =
QMAKE_LIBS_OPENVG       = libopenvg.lib
QMAKE_LIBS_OPENGL_ES2   = libEGL.lib libGLESv2.lib

QMAKE_RC                = rc

QMAKE_COMPILER_DEFINES -= _MSC_VER=1400
QMAKE_COMPILER_DEFINES += _MSC_VER=1500

【问题讨论】:

    标签: qt visual-c++ windows-ce qt5 windows-embedded-compact


    【解决方案1】:

    似乎与这个问题有关: What std::_lockit does? 您是在构建调试版本还是启用某些调试功能? 我会在内部检查是否有人已经在 CE 上构建了此版本并通知您。

    【讨论】:

    • 好的,谢谢,我不知道是否设置了任何调试设置,我真的没有任何构建 Qt 的经验,我只是按照这里的标准构建过程,因为我找不到预编译的二进制文件
    • 我是一名 BSP/驱动程序开发人员,本人对 Qt 有少量经验。
    • 很抱歉,我的评论遗漏了一部分 :) 在我们的网站上,您可以找到一些二进制文件:developer.toradex.com/knowledge-base/qt-on-the-toradex-modules 但这些是针对 v 4.8 的。您的应用程序中是否需要某些 5.4 特定功能?对于 Qt 专业知识,我们依赖我们的合作伙伴 KDAB:kdab.com/services/platforms/qt-for-windows-ce 很抱歉,但很多人都在度假(包括我自己 :)),快速获得答案可能很复杂。
    • 是的,我知道这些二进制文件,但不幸的是,我需要 Qt 5.4 或至少某些版本的 Qt 5,但最好使用 5.4。
    • 我曾尝试使用其他制造商的 SDK 进行编译,并且得到了一些不同的结果,他们也不想编译。虽然我注意到您的 SDK 不包含 Qt 所需的 Opengl ES 标头,但其他人已经这样做了。这很奇怪,因为您确实提供了使用 OpenGL 的 Qt 二进制文件。
    【解决方案2】:

    您可以在此处找到带有 OpenGL 标头的 Nvidia Tegra SDK: http://developer.download.nvidia.com/tegra/files/ce6_tegra_250_5265393.msi

    我希望 KDAB 很快就会有一个预构建版本可以使用 Windows Embedded Compact 版本,但最好是直接与他们联系:http://www.kdab.com/about-us/people-europe/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      相关资源
      最近更新 更多