开发者

How do you compile static Taglib libraries for Windows?

I don't want to compile dynamic libs, so this question was not useful.

I downloaded taglib and compiled it using:

cmake -DENABLE_STATIC=ON -DENABLE_STATIC_RUNTIME=ON -DWITH_MP4=ON -G "Visual Studio 10"

That generates the Visual Studio solutions and I can compile the "tag" project which produces tag.lib in taglib/Release.

The problem comes when I try to use the library in a test application - nothing much, just a simple test:

#include "stdafx.h"
#include "fileref.h"

int _tmain(int argc, _TCHAR* argv[])
{
    TagLib::FileRef d("");
    return 0;
}

I get the following Linker errors:

Error   1   error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall TagLib::FileRef::~FileRef(void)" (__imp_??1FileRef@TagLib@@UAE@XZ)  C:\...\taglib_test\taglib_test\taglib_test.obj  taglib_test
Error   2   error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall TagLib::FileRef::FileRef(class TagLib::File开发者_开发百科Name,bool,enum TagLib::AudioProperties::ReadStyle)" (__imp_??0FileRef@TagLib@@QAE@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z)    C:\...\taglib_test\taglib_test\taglib_test.obj  taglib_test
Error   4   error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall TagLib::FileName::FileName(char const *)" (__imp_??0FileName@TagLib@@QAE@PBD@Z) C:\...\taglib_test\taglib_test\taglib_test.obj  taglib_test
Error   3   error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall TagLib::FileName::~FileName(void)" (__imp_??1FileName@TagLib@@QAE@XZ)   C:\...\taglib_test\taglib_test\taglib_test.obj  taglib_test
Error   5   error LNK1120: 4 unresolved externals   C:\...\taglib_test\Release\taglib_test.exe  taglib_test

Can somebody please give me an idea as to what's going on here?

The following are the preprocessor defines in the tag project:

WIN32
_WINDOWS
NDEBUG
HAVE_CONFIG_H
_CRT_SECURE_NO_DEPRECATE
_CRT_NONSTDC_NO_DEPRECATE
TAGLIB_STATIC
CMAKE_INTDIR="Release"


For those who have had this problem: I fixed it by defining TAGLIB_STATIC in the test project:

#include "stdafx.h"

//This should have been generated by the build system in taglib_config.h
//but was not. 
#define TAGLIB_STATIC 
#include "fileref.h"

int _tmain(int argc, _TCHAR* argv[])
{
    TagLib::FileRef d("");
    return 0;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜