我正在尝试在Visual Studio 2015中创建一个简单的c ++项目
Peakdetector.h
#ifndef PEAKDETECTOR_H
#define PEAKDETECTOR_H
//-------------------------------------------------------
#ifdef DLL_BUILD_SETUP
#ifdef Q_OS_LINUX
#define DLLSPEC __attribute__((visibility("default")))
#else
#define DLLSPEC __declspec(dllexport)
#endif
#else
#ifdef Q_OS_LINUX
#define DLLSPEC
#else
#define DLLSPEC __declspec(dllimport)
#endif
#endif
namespace vpg {
#ifndef VPG_BUILD_FROM_SOURCE
class DLLSPEC PeakDetector
#else
class PeakDetector
#endif
private:
int __seek(int d) const;
double __getDuration(int start, int stop);
}
inline int PeakDetector::__seek(int d) const
{
return ((m_intervalslength + (d % m_intervalslength)) % m_intervalslength);
}
#endif
PeakDetector.cpp
#include "stdafx.h"
#include "peakdetector.h"
namespace vpg {
void PeakDetector::__updateInterval(double _duration)
{
//other stuff
}
}
当我尝试运行此应用程序时,我收到错误
LNK2019未解析的外部符号“__declspec(dllimport)private:int __cdecl vpg :: PeakDetector :: __ seek(int)const”(__ imp _?__ seek @ PeakDetector @ vpg @@ AEBAHH @ Z)在函数“private:void __cdecl”中引用vpg :: PeakDetector :: __ updateInterval(double)“(?__ updateInterval @ PeakDetector @ vpg @@ AEAAXN @ Z)MyCustomProject
我是新手,无法弄清楚为什么我有这个错误。我只是从一个例子中复制粘贴此代码。如果我遗漏任何代码,请告诉我。此外,我没有任何 .lib 文件。
答案 0 :(得分:2)
您必须在Visual Studio中添加DLL_BUILD_SETUP
定义。
为了做到这一点,你必须去
Project Settings -> C/C++ -> Preprocessor -> Preprocessor definitions
并将定义添加到列表中。
在编译导出符号的库(在本例中为类)时,必须使用规范__declspec(dllexport)
,并在使用该库的项目中使用__declspec(dllimport)
。
我从源代码中看到,您提供了一个额外的定义VPG_BUILD_FROM_SOURCE
,它禁用导出以使用静态/内联链接,您可以尝试添加该定义。< / p>