为了符合Qt的LGPL许可证,使用Qt库的应用程序必须使源代码可用或动态链接到Qt(如果我用这几个字正确地得到了它).
所以我想创建一个完全正确的闭源应用程序.另外,我想在Linux(目前是Xubuntu 12.04)上使用支持C++ 11的g ++/MinGW来开发Windows二进制文件.我按照这个有用的指南来完成后者.但正如指南还指出的那样,创建了静态链接的可执行文件.
由于我使用MXE自动下载和构建Qt库(版本5.0),因此我没有太多机会影响该过程.所以我的问题是,如何创建Qt库和相应应用程序的动态链接版本?
我正在尝试使用MXE(在本教程的帮助下),我在这qmake && make一步得到了这个错误:
Project ERROR: Unknown module(s) in QT: webkitwidgets".
Run Code Online (Sandbox Code Playgroud)
这意味着什么,我该怎么办?
目前,我正在尝试使用Linux上的MinGW和CMake在Windows上部署Qt应用程序。我使用MXE准备构建环境(安装mingw32并编译Qt5共享库)。我已经编写了CMakeList.txt和一个工具链脚本,它们可以很好地构建我的应用程序。
我无法实现的事情是将共享的Qt dll交付给我的内置可执行文件。
这是我的工具链文件:http : //pastebin.com/gh7kSda4
这是我的CMakeLists.txt:http : //pastebin.com/wHA7f7Sj
以下是该脚本的摘录,其中包含安装部分:
# Installation.
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/${TOOLCHAIN}-Bundle)
install(TARGETS mEyeSaver
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
install(CODE "
include(BundleUtilities)
fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/mEyeSaver${TOOLCHAIN_EXECUTABLE_FORMAT}\" \"\" \"${QT5_PATH}/bin\")
" COMPONENT Runtime)
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用fixup_bundle实现我的目标。
键入后,make install我得到以下输出:http :
//pastebin.com/DymaH1Mu
之后,x86_64-w64-mingw32-Bundle文件夹中除mEyeSaver.exe外什么都没有。没有dll被复制。我确定~/mxe/usr/x86_64-w64-mingw32.shared/qt5/bin文件夹中需要Qt dll 。但是,我仍然在做错事。
如何解决问题?谢谢
我重新考虑了我在做什么,以至于fixup_bundle不能分析Windows可执行文件的依赖关系,因为Linux ldd(它使用的)与Windows应用程序无关。所以我已经编辑了我的问题。
有没有简单的方法可以使用CMake(或其他工具)获取Windows可执行文件的依赖库,而无需直接复制它们?
我需要将qt 5.5版与mxe一起使用,但找不到任何选项。我只看到qt是4.8.7,qt5是5.8,我仅限于两个版本之一,还是可以使用5.5。
谢谢
我试图使用cmake和MXE交叉编译Windows.
在*nix上一切正常.但是我不知道如何使用MinGW和交叉编译来获得一些依赖项(Grantlee5和Qt5WebKitWidgets).这是我的CMakeLists.txt的一个(最小)示例:
cmake_minimum_required(VERSION 2.8.11)
project(MyProject)
set(QT_USE_QTXML TRUE)
set(QT_USE_QTWEBKIT TRUE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
# Instruct CMake to run moc automaticall when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#find packages
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Grantlee5 REQUIRED)
find_package(Qt5WebKitWidgets REQUIRED)
find_package(Git)
#(...) add all sources
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Tell CMake to create the executable
add_executable(MyProjectExec ${SRCS})
target_link_libraries(MyProjectExec
Qt5::Widgets
Qt5::Xml
Grantlee5::Templates
Qt5::WebKitWidgets
)
Run Code Online (Sandbox Code Playgroud)
如果我只使用"cmake",它工作正常.但是,如果我使用MXE的工具链来交叉编译Widnows(i686-w64-mingw32.static-cmake),则Grantlee5和Qt5WebKitWidgets会失败并显示以下消息:
在CMakeLists.txt上生成错误:xx(find_package):无法找到与请求的版本""兼容的包"Grantlee5"的配置文件.[原文如此]
考虑了以下配置文件但未被接受:
Run Code Online (Sandbox Code Playgroud)/usr/lib/cmake/Grantlee5/Grantlee5Config.cmake, version: 5.0.0 (64bit) …