Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构建c++;使用Quazip的Qt-CLI工具_C++_Qt_Cmake_Quazip_Libz - Fatal编程技术网

C++ 构建c++;使用Quazip的Qt-CLI工具

C++ 构建c++;使用Quazip的Qt-CLI工具,c++,qt,cmake,quazip,libz,C++,Qt,Cmake,Quazip,Libz,所以通常我是一个嵌入式软件开发人员,第一次我需要做这样的事情。。。所以我根本不是这方面的专家。。。我已经用很多谷歌搜索和试错的方法走到了这一步 我想做什么 我需要编写一个可以压缩和解压缩文件的C++ CLI应用程序。p> 我的一般情况 我想使用Qt和Quazip,因为Qt不支持本机压缩(或者确实支持)。 我想在Windows 64位系统上使用Mingw和CMake构建Windows 64位 据我所知,最好是静态编译Quazip,这样我就不会依赖其他系统上可能存在的任何其他Quazip D

所以通常我是一个嵌入式软件开发人员,第一次我需要做这样的事情。。。所以我根本不是这方面的专家。。。我已经用很多谷歌搜索和试错的方法走到了这一步

我想做什么 我需要编写一个可以压缩和解压缩文件的C++ CLI应用程序。p>
我的一般情况 我想使用Qt和Quazip,因为Qt不支持本机压缩(或者确实支持)。 我想在Windows 64位系统上使用Mingw和CMake构建Windows 64位

据我所知,最好是静态编译Quazip,这样我就不会依赖其他系统上可能存在的任何其他Quazip DLL

我认为它是如何工作的
  • 我需要编译zlib
  • 然后我需要编译Quazip(使用zlib)
  • 将已编译的库链接到我的项目
  • 我的研究 我发现了两个很好的youtube视频,它们应该对我有所帮助:

    这些方法都不适合我。 我还发现那篇博文对我有一点帮助

    这个网站到昨天还可用,现在已经不存在了

    我还发现了一个老问题,这对我有点帮助:

    关于我所做工作的详细步骤: 1。建筑zlib

    从官方网站下载了zlib的最新版本。版本1.2.11 我使用以下命令构建zlib:

    cd C:/some/Path/zlib-1.2.11
    mingw32-make -f win32/Makefile.gcc
    
    那很好用我有一个

    • libz.a
    • libz.dll.a
    • zlib1.dll
    这些文件和所有头文件(11个文件)我复制在一个单独的文件夹。看起来是这样的:

    Build
    |
    +-include
    +-lib
    
    文件夹中的标题包括lib文件夹中的libs

    2。建筑Quazip

    现在麻烦的部分

    从下载Quazip的最新版本(版本0.8.1)

    我尝试了各种方法来编译Quazip。我坚持的是: 在quazip文件夹(源所在的文件夹)内的Qt creator中打开.pro文件

    然后我将编译好的zlib添加到Qmake文件中。 我在文件末尾添加了以下行:

    INCLUDEPATH += "C:/Build/include" 
    LIBS += -L"C:/Build/lib" 
    LIBS += -lz
    
    然后以QtCreator作为发布版本构建Quazip。 当我得到

    • quazip.dll
    • libquazip.a
    我从include文件夹中的quazip(16个fil)和lib文件夹中的两个lib复制所有头文件

    现在我在build文件夹中有了一个zippackage

    3。将Quazip和zlib添加到我的项目中

    将FindQuazip.cmake文件从Quazip Repo复制到我的项目中。 在我的CMakeLists.txt中,我添加了以下几行:

    set(ZLIB_ROOT "C:/BUILD" CACHE PATH "Path to zlib")
    find_package(ZLIB REQUIRED)
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
    find_package(QuaZip REQUIRED)
    
    我需要设置ZLIB_根,以便CMake使用我想要的ZLIB。如果我不设置Root,他将使用我电脑上ruby安装的zlib。 我还补充说

    include_directories(
        "${BASE_DIR}/sources"
        "${QUAZIP_INCLUDE_DIR}"
        )
    
    最后呢

    add_executable(${PROJECT_NAME} ${SOURCES} ${INC_ALL} )
    
    target_link_libraries(${PROJECT_NAME} Qt5::Network Qt5::Core Qt5::Widgets
        ${ZLIB_LIBRARIES}
        ${QUAZIP_LIBRARIES}
        )
    
    然后我需要添加FindQuazip.cmake,因为它会找到libs:我编辑了以下内容:

    FIND_PATH(QUAZIP_LIBRARY_DIR
              WIN32_DEBUG_POSTFIX d
              NAMES libquazip.a #quazip.dll
              HINTS "C:/Build/lib"
              PATH_SUFFIXES QuaZip/lib
              )
    FIND_LIBRARY(QUAZIP_LIBRARIES NAMES libquazip.a HINTS ${QUAZIP_LIBRARY_DIR})
    FIND_PATH(QUAZIP_INCLUDE_DIR NAMES quazip.h HINTS ${QUAZIP_LIBRARY_DIR}/../include)
    FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR NAMES zlib.h)
    
    好吧,我花了两天时间才到达现在的位置。 现在当我运行CMake时,一切都很好。他找到了libs。 我甚至可以在Quazip的头文件中包含一个。但是当我尝试编译一个最小的示例时,链接器找不到任何符号。 最简单的例子:

    #包括
    #包括
    #包括“JlCompress.h”
    int main(int argc,char*argv[])
    {
    质量保证申请a(argc、argv);
    
    cout来自QuaZip的pro文件:

    # You'll need to define this one manually if using a build system other  
    # than qmake or using QuaZIP sources directly in your project.  
    CONFIG(staticlib): DEFINES += QUAZIP_STATIC
    
    当您将
    staticlib
    添加到quazip.pro(第2行)中的
    CONFIG
    时,应触发此错误:


    如果您不使用qmake构建Quazip,只需确保您以特定于构建系统的方式定义Quazip\u STATIC
    就可以了。构建它,并在FindQuaZip.cmake中将
    libquazip.a
    替换为
    Quazip.dll
    。现在,我得到了对u imp\uzn10jlcompress11compressdire7qstr的未定义引用ingS0_b.有什么想法吗?我在我的项目中使用了QuaZip 0.7.1和MSVC…我在定义staticlib时得到了一个
    QuaZip.lib
    文件。它比旧的lib文件和dll的总和(659kB而不是223kB)大得多。在构建之前是否重新运行了qmake?(在Qt Creator Build>run qmake中)是否清除了输出路径?从application.pro文件中,应添加:DEFINES+=QUAZIP_STATIC。此定义将禁用QUAZIP文件头中的某些导入/导出定义。
    CONFIG += qt warn_on staticlib