无法在 qmake Qt 项目中使用来自静态 zlib 库的代码

Unable to use code from static zlib library in a qmake Qt project

我必须在我的 DLL 中使用 zlib(版本 1.2.8,已经从官方源编译了一个)。我正在使用静态链接,但无法使用 zlib 中的函数或对象 - 给我“С2065 未声明的标识符”。我正在使用 Qt 5.4.1 和来自 MSVS2013 的编译器。这是我的专业文件:

QT       -= gui
TARGET = ZLIB
TEMPLATE = lib

DEFINES += ZLIB_LIBRARY

ZLIBDIR += "Y:/Git/Modules/TestZLIB/Libs" #It contains zlib's dll, lib and def
INCLUDEPATH += $${ZLIBDIR}

win32 {
    LIBS += -L$${ZLIBDIR} -lzdll
}

SOURCES += \
    Library.cpp \
    myzlib.cpp

HEADERS +=\
    myzlib.h \
    myzlib_global.h \
    zconf.h \
    zlib.h

unix {
    target.path = /usr/lib
    INSTALLS += target
}

更新: .lib、.dll、.def 的路径是 Y:/Git/Modules/TestZLIB/Libs.

zlib.h 和 zconf.h 在项目文件夹中,我也试图将它们复制到 Y:/Git/Modules/TestZLIB/Libs 并从那里将它们连接到项目,但它没有不适合我。 其他源文件在Y:/Git/Modules/TestZLIB/TestZLIB.

Y:/Git/Modules/TestZLIB/TestZLIB - 这是一个项目文件夹(源、.pro 文件等)。 Y:/Git/Modules/TestZLIB/Libs - 这是包含 zlib 文件的文件夹。

我该怎么做才能让它发挥作用? 谢谢!

在提问时,明确提问是一种常见的礼貌。即使你的项目真的命名为 zlib,你也不应该问这样一个项目名称的问题,因为如果不在每一步都解决歧义,就不可能回答任何关于它的问题。它还可能混淆您收到的错误消息。以后说zlib就是压缩库,不是你的项目。

如果唯一的编译器错误是关于未知标识符的,那么您的问题不在于 .pro 文件。编译器根本看不到 zlib 的声明。以下是可能的错误:

  1. 您没有在自己的文件中包含 zlib headers。
  2. 您的 include guards 与 zlib 的冲突并有效地隐藏了 zlib header 内容。
  3. 如果您编写了自己的 zlib.h,它可能隐藏了 zlib 自己的 header。如果是这样,您必须将其重命名为其他名称。
  4. 如果 zlib.hzconf.h 来自 zlib,则它们不属于您的 .pro 文件。

确保两者都不是。