cli 调用 c++ dll 链接错误 LNK2028 LNK2019

本文介绍了在使用C++ DLL时遇到的链接错误,并提供了两种解决方案:一是通过预编译指令指定链接库文件,二是采用静态加载的方式。这些方法有助于解决跨语言调用时的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近写一个cli程序(B)对另一个c++dll(C)进行包装 再由Csharp程序(A
)通过调用B再调用C中的函数/类。
C编译正确,编译B时出现如下链接错误

 

错误 8 error LNK2028: 无法解析的标记(0A00000C) "public: __thiscall CXXXPlateLimit::MyLibName(void)" (??CXXXPlateLimit@@$$FQAE@XZ),该标记在函数 "public: int __clrcall clrLimite::笑嘻嘻inder::FindKLPlateDongleStone(class System::String ^)" (?FindKLPlateDongleStone@Cxxxnder@clrLimite@@$$FQ$AAMHP$AAVString@System@@@Z) 中被引用 M:/_集成分支/Src/Plugins/IKLSeis.NsasDataModel/DongleCtrlApp/cliLimite/clrLimite.obj

 

解决:

方法1:

通过如下命令解决

在中添加

#if _DEBUG

#pragma comment(lib, "MyLibNamed.lib")

#else

#pragma comment(lib, "MyLibName.lib")

#endif


方法2:

 

或静态加载,向B项目中添加已有项将该动态库添加到工程中

 


 


 

回答: 在C++调用DLL时,出现LNK2019错误通常是由于链接器无法解析外部符号引起的。这个错误通常发生在以下几种情况下: 1. 缺少库文件:在代码中使用了某个函数或变量,但是没有包含相应的库文件。确保你已经正确地包含了所需的库文件,并且库文件的路径设置正确。\[2\] 2. 函数签名不匹配:在代码中调用DLL中的函数时,函数的签名(参数类型和返回类型)必须与DLL中的函数定义一致。如果签名不匹配,链接器将无法解析外部符号。请确保你在代码中正确地声明了函数的签名,并且与DLL中的函数定义一致。\[1\] 3. 缺少函数定义:如果你在代码中调用DLL中的函数,但是没有提供相应的函数定义,链接器将无法解析外部符号。请确保你已经正确地提供了函数定义,并且函数名与DLL中的函数名一致。\[1\] 4. 编译器选项不匹配:如果你在编译代码时使用了不匹配的编译器选项,链接器可能无法解析外部符号。请确保你在编译代码时使用了与DLL相匹配的编译器选项。\[1\] 综上所述,当在C++调用DLL时出现LNK2019错误时,你应该检查是否缺少库文件、函数签名是否匹配、是否缺少函数定义以及编译器选项是否匹配。根据具体情况进行相应的调整和修复即可。 #### 引用[.reference_title] - *1* *2* [c++调用dll出现LNK2001 无法解析的外部符号](https://blog.youkuaiyun.com/chenhao0568/article/details/130891826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [C++ error LNK2019: 无法解析的外部符号 错误解决方案](https://blog.youkuaiyun.com/qq_42672745/article/details/125921205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值