错误LNK2019 - 名称修饰 - 缺少__imp_

时间:2016-06-10 17:47:11

标签: visual-c++ linker-errors lnk2019

这可能是重复的,但有很多LNK2019个问题,我无法全部阅读。这是我的问题:我收到以下错误消息:

4>ScatterometerView.obj : error LNK2019: unresolved external symbol 
"__declspec(dllimport) public: __thiscall CPGLGraphBitDlgBSDF::CPGLGraphBitDlgBSDF(class CPGLGraph *)" (__imp_??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z) 
referenced in function "public: void __thiscall CScatterometerView::DisplayBSDFPlot(class BSDF *)" (?DisplayBSDFPlot@CScatterometerView@@QAEXPAVBSDF@@@Z)

当我查看DUMPBIN的输出时,我会看到构造函数

12    B 00002EFF ??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z = @ILT+7930(??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z)

它包含__imp__以外的所有内容。 DLL 中的类定义如下:

#define PGL_EXT_CLASS _declspec(dllexport)
class PGL_EXT_CLASS CPGLGraphBitDlgBSDF : public CPGLGraphDlg
{
public:
    static const int numPointsToAvg = 3;
    CPGLGraphBitDlgBSDF();
    CPGLGraphBitDlgBSDF(CPGLGraph* _pGraph);
    ~CPGLGraphBitDlgBSDF(void);
    // ...lots more functions...
}

并且可执行文件中的用法是:

CPGLGraph* pGraph = new CPGLGraph;
// ...code to fill in the graph data...
m_bsdf_plot = new CPGLGraphBitDlgBSDF(pGraph);

踢球者是班上的其他所有功能都有效;只有我最近添加的两个(包括这个构造函数)不起作用。较旧的功能没有__imp__装饰,这似乎是我新添加的功能所必需的。

创建的.def个文件没有定义任何功能,因此这似乎并不存在差异。我在链接器上使用了MAP file,并且唯一具有__imp__前缀的函数是Microsoft定义的函数。没有在 PGL.dll 中定义的单个函数,它们都可以正常工作。请告诉我在哪里寻找问题甚至是线索。

1 个答案:

答案 0 :(得分:0)

#pragma once
#if defined DLL_EXPORT
#define MY_API_NAME __declspec(dllexport)
#else
#define MY_API_NAME __declspec(dllimport)
#endif

通常,你的DLL中存在.hpp。您需要在DLL项目的预处理器设置中定义DLL_EXPORT,因此在构建DLL并导入时将导出这些函数,当它在不同的项目中使用时。