私のOSはWindows7Ultimatex64です。私はQt4.8を使用して、id3libを使用するプログラムを作成しています。Windowsバイナリをダウンロードしました。これは、id3libライブラリがどのように使用されるかを示す*.proファイルの一部です。
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にありますか?回避策があるかどうか誰かが知っていますか?