【发布时间】:2020-03-23 04:47:40
【问题描述】:
我正在使用我无法控制的外部库,更准确地说是 ADTF 流媒体库。 我在 Visual Studio 2019 中链接到这个库(使用 VS 2010 平台工具集)。为此,我将包含目录添加到
ProjectName -> Properties -> C/C++ -> General,
包含lib的文件夹的路径
ProjectName -> Properties -> Linker -> General
和库的名称(adtfstreamingD_280.lib)到
ProjectName -> Properties -> Linker -> Input.
不,我收到链接器错误,但仅针对静态类方法,非静态方法没有链接器错误。有谁知道如何解决这样的问题?任何帮助将不胜感激。
我的代码:
头文件:
#ifndef _DAT_HANDLER_H_
#define _DAT_HANDLER_H_
#include <string>
#include <stdint.h>
#include "adtf_streaming.h"
class DatHandler
{
public:
DatHandler();
~DatHandler();
void Load(std::string datFilePath);
int32_t GetNumOfStreams();
protected:
private:
// Resources are handled by ADTF
adtfstreaming::IADTFFileReader* m_fileReader;
};
#endif // _DAT_HANDLER_H_
cpp 文件:
#include "DatHandler.h"
DatHandler::DatHandler() : m_fileReader(nullptr)
{
// do nothing
}
DatHandler::~DatHandler()
{
if (nullptr != m_fileReader)
{
m_fileReader->Close();
adtfstreaming::IADTFFileReader::Release(m_fileReader);
}
}
int32_t DatHandler::GetNumOfStreams()
{
int32_t streamCount;
tResult res = m_fileReader->GetStreamCount(streamCount);
if (IS_FAILED(res))
{
return -1;
}
return streamCount;
}
void DatHandler::Load(std::string path)
{
if (nullptr == m_fileReader)
{
m_fileReader = adtfstreaming::IADTFFileReader::Create();
}
else
{
m_fileReader->Close();
}
m_fileReader->Open(path.c_str());
}
错误(德语,不知道如何得到英文的错误输出):
Error LNK2019 Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static long __cdecl adtfstreaming::IADTFFileReader::Release(class adtfstreaming::IADTFFileReader *)" (__imp_?Release@IADTFFileReader@adtfstreaming@@SAJPAV12@@Z)" in Funktion ""public: __thiscall DatHandler::~DatHandler(void)" (??1DatHandler@@QAE@XZ)".
Error LNK2019 Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static class adtfstreaming::IADTFFileReader * __cdecl adtfstreaming::IADTFFileReader::Create(void)" (__imp_?Create@IADTFFileReader@adtfstreaming@@SAPAV12@XZ)" in Funktion ""public: void __thiscall DatHandler::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?Load@DatHandler@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)".
Error LNK1120 2 nicht aufgelöste externe Verweise.
编辑:也许我还应该提到我只有 ADTF 流媒体库 2.8.0 可用。
【问题讨论】:
-
@Alan:我尝试定义 STREAMINGLIB_EXPORTS,但没有成功。此外,我没有链接器错误 1181。接受的答案建议构建流媒体库 fox x64,但老实说,我不完全知道我应该如何做缺少 .cpp 文件。
-
老实说,我不认为这是链接问题的重复。在那里,找不到 .lib 文件,这似乎不是问题。就我而言,只有静态方法在链接时会出现问题。
-
就我而言,您可能不会定义类的静态成员。静态类成员必须具有唯一定义,否则将违反单一定义规则。不能内联定义的静态类成员必须使用其完全限定名称在一个源文件中定义。如果根本没有定义,链接器会生成 LNK2019。您也可以将符号定义为静态,然后在文件外引用它。有关更多详细信息,我建议您可以参考链接:docs.microsoft.com/en-us/cpp/error-messages/tool-errors/…
-
@MSFT:但它应该在 lib 中编译,对吧?我的意思是,ADTF 本身也使用相同的库,即它应该在原则上工作。
标签: c++ visual-studio dll linker