Visual Studio 2010 - Hvordan kompilerer du statiske Taglib-biblioteker til Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ønsker ikke at kompilere dynamiske libs, så dette spørgsmål var ikke nyttigt.


Jeg downloadede taglib og kompilerede det ved hjælp af:


cmake -DENABLE\_STATIC=ON -DENABLE\_STATIC\_RUNTIME=ON -DWITH\_MP4=ON -G "Visual Studio 10"


Det genererer Visual Studio-løsninger, og jeg kan kompilere 'tag' -projektet, der producerer tag.lib i taglib/Release.


Problemet kommer, når jeg forsøger at bruge biblioteket i en testapplikation - intet meget, bare en simpel test:


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

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


Jeg får følgende linkerfejl:


Error   1   error LNK2001: unresolved external symbol "\_\_declspec(dllimport) public: virtual \_\_thiscall TagLib::FileRef::~FileRef(void)" (\_\_imp\_??1FileRef@TagLib@@UAE@XZ)  C:...	aglib\_test	aglib\_test	aglib\_test.obj  taglib\_test
Error   2   error LNK2001: unresolved external symbol "\_\_declspec(dllimport) public: \_\_thiscall TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (\_\_imp\_??0FileRef@TagLib@@QAE@VFileName@1@\_NW4ReadStyle@AudioProperties@1@@Z)    C:...	aglib\_test	aglib\_test	aglib\_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:...	aglib\_test	aglib\_test	aglib\_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:...	aglib\_test	aglib\_test	aglib\_test.obj  taglib\_test
Error   5   error LNK1120: 4 unresolved externals   C:...	aglib\_testRelease	aglib\_test.exe  taglib\_test


Kan nogen give mig en ide om, hvad der foregår her?


Følgende er præprocessoren definerer i tag-projektet:


WIN32
\_WINDOWS
NDEBUG
HAVE\_CONFIG\_H
\_CRT\_SECURE\_NO\_DEPRECATE
\_CRT\_NONSTDC\_NO\_DEPRECATE
TAGLIB\_STATIC
CMAKE\_INTDIR="Release"

Bedste reference


For dem der har haft dette problem:
Jeg fik det ved at definere TAGLIB\_STATIC i testprojektet:


#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;
}