【发布时间】:2012-03-20 11:37:18
【问题描述】:
我的操作系统是 Windows 7 Ultimate x64。我正在使用 Qt 4.8 编写一个将使用 id3lib 的程序。我已经下载了windows binaries。以下是 *.pro 文件的一部分,展示了如何使用 id3lib 库:
HEADERS += MainWindow.h \
id3lib/id3/sized_types.h \
id3lib/id3/globals.h \
id3lib/id3/tag.h \
id3lib/id3/utils.h \
id3lib/id3/id3lib_frame.h \
id3lib/id3/field.h \
id3lib/id3/id3lib_strings.h \
id3lib/id3/id3lib_streams.h
win32: LIBS += -L$$PWD/id3lib/ -lid3lib
INCLUDEPATH += $$PWD/id3lib
DEPENDPATH += $$PWD/id3lib
如您所料,库文件(id3lib.dll 和 id3lib.lib)位于 id3lib 目录中,所有必需的标头位于 id3lib/id3 目录中。
在 globals.h 中,我定义了以下内容:
#define ID3LIB_LINKOPTION LINKOPTION_CREATE_DYNAMIC
并修改了同一文件中的以下部分:
# if (ID3LIB_LINKOPTION == LINKOPTION_CREATE_DYNAMIC)
//used for creating a dynamic dll
# define ID3_C_EXPORT extern _declspec(dllexport)
# define ID3_CPP_EXPORT __declspec(dllexport)
# define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
# endif
如下:
# if (ID3LIB_LINKOPTION == LINKOPTION_CREATE_DYNAMIC)
//used for creating a dynamic dll
# define ID3_C_EXPORT Q_DECL_IMPORT
# define ID3_CPP_EXPORT Q_DECL_IMPORT
# define CCONV __stdcall // Added for VB & Delphi Compatibility - By FrogPrince Advised By Lothar
# endif
以便它与 Qt 一起使用。
接下来,我添加了id3/tag.h,并编写了以下代码:
ID3_Tag tag("test.wma");
qDebug() << tag.size();
编译后出现如下错误:
undefined reference to `_imp___ZN7ID3_TagC1EPKc'
undefined reference to `_imp___ZNK7ID3_Tag4SizeEv'
undefined reference to `_imp___ZN7ID3_TagD1Ev'
undefined reference to `_imp___ZN7ID3_TagD1Ev'
(several few, same format: `_imp___xxxxx_Tagxxxx')
我知道导致未定义引用的原因,但就我而言,为什么链接器找不到实现?它现在在 id3lib.dll 中吗?有谁知道有什么解决方法吗?
【问题讨论】:
-
@Lol4t0:是的。我正在使用 Qt Creator。