ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

尽管使用导出的符号链接到.lib文件,但是从托管C到非托管C的链接错误链接

2019-10-13 07:07:10  阅读:165  来源: 互联网

标签:c visual-c visual-studio-2010 c-cli


尽管遵循有关使用和从C/C++LI包装dll链接到非托管C代码的各种文章,但我无法解决这些链接问题.

1>MyClassAdapter.obj : error LNK2028: unresolved token (0A00000A) "public: __thiscall MyClass::~MyClass(void)" (??1MyClass@@$$FQAE@XZ) referenced in function "public: void * __thiscall MyClass::`scalar deleting destructor'(unsigned int)" (??_GMyClass@@$$FQAEPAXI@Z)
1>MyClassAdapter.obj : error LNK2028: unresolved token (0A00000B) "public: __thiscall MyClass::MyClass(void)" (??0MyClass@@$$FQAE@XZ) referenced in function "public: __clrcall WrapperLayer::MyClassAdaptor::MyClassAdaptor(void)" (??0MyClassAdaptor@WrapperLayer@@$$FQ$AAM@XZ)
1>MyClassAdapter.obj : error LNK2019: unresolved external symbol "public: __thiscall MyClass::MyClass(void)" (??0MyClass@@$$FQAE@XZ) referenced in function "public: __clrcall WrapperLayer::MyClassAdaptor::MyClassAdaptor(void)" (??0MyClassAdaptor@WrapperLayer@@$$FQ$AAM@XZ)
1>MyClassAdapter.obj : error LNK2019: unresolved external symbol "public: __thiscall MyClass::~MyClass(void)" (??1MyClass@@$$FQAE@XZ) referenced in function "public: void * __thiscall MyClass::`scalar deleting destructor'(unsigned int)" (??_GMyClass@@$$FQAEPAXI@Z)

我有一个简单类的非托管本机C dll,相应地导出/导入符号

// MyClass.h
#ifdef _EXPORTING
   #define DLL_PUBLIC __declspec(dllexport)
#else
   #define DLL_PUBLIC __declspec(dllimport)
#endif

class DLL_PUBLIC MyClass { . . . };

而且我可以看到生成后生成了.dll和.lib链接器文件.

然后,我有托管的C/C++LI包装器项目(也是dll),该项目在“链接器”->“输入”->“附加依赖项”设置中链接到MyClass.lib.包装项目中还包括MyClass的.h文件,我可以看到sln可以看到MyClass.h文件.

// MyClassAdaptor.h

#include "MyClass.h"

namespace WrapperLayer
{
    public ref class MyClassAdaptor 
    { 
      . . . 
    private:
        MyClass* _myclass;  
    }; 
}

可能缺少什么?

解决方法:

几点:

>对DLL使用Dependency Walker,并检查这些符号是否确实在DLL中.
>确保使用正确的lib文件-32位LIB不能用于64位构建.
>确保用于构建类的.CPP文件实际上是非托管文件(或DLL本身总体上是非托管文件).

标签:c,visual-c,visual-studio-2010,c-cli
来源: https://codeday.me/bug/20191013/1906186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有