zlib in Qt - QtZlib not present

2020-02-06 04:30发布

I am using QuaZip library, which has zlib dependency. I want to compile my CMake managed application under Archlinux and Windows 7, in both I have Qt 5.3.0 installed.

On Linux:

I have read here "how to add zlib to an existing qt installation" that zlib is a native part of Qt installation. But in archlinux there is no such directory. Of cause I searched through all other Qt include directories including QtCore, but there was no sign of zlib. On the other hand system installation of zlib can be found on archlinux through FindZLIB.cmake module.

On Windows:

In the Windows installation of Qt there is QtZlib folder in Qt include directory, so it can be included. Nevertheless, compiler always complain that he cannot link zlib functions from library, error log here. I've also tried to set external zlib library manually through TARGET_LINK_LIBRARIES but with no success.

Have anybody experiance with linking Zlib under Qt5 using CMake ?

标签: c++ qt cmake qt5 zlib
3条回答
做自己的国王
2楼-- · 2020-02-06 04:57

Qt's zlib is an internal implementation detail. You're not supposed to use it. You need to link your own copy of zlib, just as you would need to if you weren't using Qt at all.

查看更多
3楼-- · 2020-02-06 04:58

Try to add into pro file this line:

 INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/3rdparty/zlib    

or

INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/qtbase/include/QtZlib

or

 INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/qtbase/3rdparty/zlib   

For my app this worked fine.

查看更多
Deceive 欺骗
4楼-- · 2020-02-06 05:20

1) You should use your package manager on Archlinux and your own installation on Windows. Do not rely on the Qt third-party installation. It may be there today, but disappear at any certain moment when a new release comes out.

This is what I would suggest you doing on your Archlinux box:

pacman -S zlib

2) Also, you should use FindZLIB.cmake for finding zlib the following way in your CMakeLists.txt:

find_package( ZLIB REQUIRED )
if ( ZLIB_FOUND )
    include_directories( ${ZLIB_INCLUDE_DIRS} )
    target_link_libraries( YourProject ${ZLIB_LIBRARIES} )
endif( ZLIB_FOUND )
查看更多
登录 后发表回答