错误解决外部符号

时间:2017-08-03 20:00:25

标签: c++

我正在尝试在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 文件。

1 个答案:

答案 0 :(得分:2)

您必须在Visual Studio中添加DLL_BUILD_SETUP定义。

为了做到这一点,你必须去

Project Settings -> C/C++ -> Preprocessor -> Preprocessor definitions

并将定义添加到列表中。

在编译导出符号的库(在本例中为类)时,必须使用规范__declspec(dllexport),并在使用该库的项目中使用__declspec(dllimport)

我从源代码中看到,您提供了一个额外的定义VPG_BUILD_FROM_SOURCE,它禁用导出以使用静态/内联链接,您可以尝试添加该定义。< / p>