C++ 构建c++;使用Quazip的Qt-CLI工具
所以通常我是一个嵌入式软件开发人员,第一次我需要做这样的事情。。。所以我根本不是这方面的专家。。。我已经用很多谷歌搜索和试错的方法走到了这一步 我想做什么 我需要编写一个可以压缩和解压缩文件的C++ CLI应用程序。p>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
cd C:/some/Path/zlib-1.2.11
mingw32-make -f win32/Makefile.gcc
那很好用我有一个
- libz.a
- libz.dll.a
- zlib1.dll
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
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