【问题标题】:How do you compile static Taglib libraries for Windows?如何为 Windows 编译静态 Taglib 库?
【发布时间】:2011-09-05 04:51:47
【问题描述】:

我不想编译动态库,所以this question 没用。

我下载了 taglib 并使用:

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

这会生成 Visual Studio 解决方案,我可以编译在 taglib/Release 中生成 tag.lib 的“tag”项目。

当我尝试在测试应用程序中使用该库时出现问题 - 没什么,只是一个简单的测试:

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

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

我收到以下链接器错误:

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::FileName,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

有人可以告诉我这里发生了什么吗?

以下是标签项目中定义的预处理器:

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

【问题讨论】:

    标签: windows visual-studio-2010 static-libraries taglib


    【解决方案1】:

    对于遇到此问题的人: 我通过在测试项目中定义 TAGLIB_STATIC 来修复它:

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

    【讨论】:

    • 我知道这是旧的,但非常感谢你。几个小时以来一直在尝试解决这个问题。
    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2015-12-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多