我正在尝试使用 AVT 的 VIMBA SDK 运行一个玩具程序。目前,除了一个警告外,一切进展顺利。当我尝试编译时,出现一系列错误(其中 14 个),所有错误都标记为相同的内容:
函数*在此处插入调用*定义被标记为 dllimport
文件本身在下面 - 奇怪的是,在这个文件中,只有 ~IFeatureObserver()、IFeatureObserver() 和 IFeatureObserver( const IFeatureObserver& ) 触发了错误; FeatureChanged() 在编译过程中不会出错。
#ifndef AVT_VMBAPI_IFEATUREOBSERVER_H
#define AVT_VMBAPI_IFEATUREOBSERVER_H
#include <VimbaCPP/Include/VimbaCPPCommon.h>
#include <VimbaCPP/Include/SharedPointerDefines.h>
#include <VimbaCPP/Include/Feature.h>
#include <vector>
namespace AVT {
namespace VmbAPI {
class IFeatureObserver
{
public:
IMEXPORT virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
IMEXPORT virtual ~IFeatureObserver() {}
protected:
IMEXPORT IFeatureObserver() {}
IMEXPORT IFeatureObserver( const IFeatureObserver& ) { /* No copy ctor */ }
};
typedef std::vector<IFeatureObserverPtr> IFeatureObserverPtrVector;
}} // namespace AVT::VmbAPI
#endif
追踪 IMEXPORT 的来源后,我在 .h 文件中找到了它。
#if defined (_WIN32)
#if defined AVT_VMBAPI_CPP_EXPORTS // DLL exports
#define IMEXPORT __declspec(dllexport)
#elif defined AVT_VMBAPI_CPP_LIB // static LIB
#define IMEXPORT
#else // import
#define IMEXPORT __declspec(dllimport)
#endif
#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
#define IMEXPORT
#elif defined (__APPLE__)
#define IMEXPORT
#else
#error Unknown platform, file needs adaption
#endif
我目前正在 Win7-32 位机器上使用 Qt 进行编程,据我所知,IMEXPORT 被定义为 __declspec(dllimport)。
想法?预先感谢!
最佳答案
您应该在 makefile 或 VS 项目中定义宏 AVT_VMBAPI_CPP_EXPORTS
。这样,IMEXPORT 被定义为该库的 dllexport,并在其他库/应用程序使用它时被定义为 dll 导入。
顺便说一句,将此属性添加到类本身而不是每个函数中会更干净。
class IMEXPORT IFeatureObserver {
public:
virtual void FeatureChanged( const FeaturePtr &pFeature ) = 0;
};
关于c++ - 错误: function definition is marked dllimport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644151/