我試圖獲得一個運行AVT的VIMBA SDK的玩具程序。目前,除了一個警告外,這樣做很好。當我嘗試編譯,我收到了一系列錯誤(其中14),所有標註同樣的事情:錯誤:函數定義標記爲dllimport
function *insert call here* definition is marked dllimport
文件本身是如下─好奇的是,在該文件中,只IFeatureObserver(),IFeatureObserver()和IFeatureObserver(常量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
我目前在Qt中,一個Win7-32位計算機上,而據我可以告訴IMEXPORT被定義爲__declspec(dllimport的)。
想法?提前致謝!
問題是,由於某些原因,這些函數被定義(有機構),但他們被標記爲從.dll導入。它看起來可能是庫中的一個bug,因爲它可能適用於靜態構建。你*可以*嘗試刪除函數體並離開原型,但是這對我來說會感覺骯髒和錯誤。也許嘗試鏈接靜態? –