无法在 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 的声明。以下是可能的错误:
- 您没有在自己的文件中包含 zlib headers。
- 您的 include guards 与 zlib 的冲突并有效地隐藏了 zlib header 内容。
- 如果您编写了自己的
zlib.h
,它可能隐藏了 zlib 自己的 header。如果是这样,您必须将其重命名为其他名称。
- 如果
zlib.h
和 zconf.h
来自 zlib,则它们不属于您的 .pro
文件。
确保两者都不是。
我必须在我的 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 的声明。以下是可能的错误:
- 您没有在自己的文件中包含 zlib headers。
- 您的 include guards 与 zlib 的冲突并有效地隐藏了 zlib header 内容。
- 如果您编写了自己的
zlib.h
,它可能隐藏了 zlib 自己的 header。如果是这样,您必须将其重命名为其他名称。 - 如果
zlib.h
和zconf.h
来自 zlib,则它们不属于您的.pro
文件。
确保两者都不是。